@Scorpiored88

Почему fetch возвращает promise pending?

Всем доброго!
Столкнулся с проблемой того, что второй POST запрос через fetch возвращает Promise pending
Вот код:

getDataToRequest: () => {
            return fetch(`url`, {
                method: "GET",
                credentials: "include"
            }).then(response => response.text())
                .then(respHTML => {
                    respHTML = respHTML.split('<body>')[1].split('</body>')[0]
                    let  htmlObject = document.createElement('div');
                    htmlObject.innerHTML = respHTML;
                    let key = htmlObject.children[1].getElementsByClassName('form')[0].children[0].value;
                    let id = htmlObject.children[1].getElementsByClassName('form')[0].children[1].value
                    return {"key": key, "id": id}

                })
    },


makeRequest: (key, id, comment ) =>{
        fetch(`url2`,{
            method: "POST",
            headers: {"Content-Type": "application/x-www-form-urlencoded"},
            body: new URLSearchParams(`key=${key}&id=${id}&comment=tester`),
            credentials: "include"

        }).then(HtmlResult => {
            let tmpHtml = HtmlResult.text()
            console.log('html result ->> ', tmpHtml); //  тут Promise {<pending>} ;  [[PromiseStatus]] :"resolved 
                                                                           // [[PromiseValue]]: тут ответ сервера
            return tmpHtml;
        })
    },


    myAsyncFn: async (comment) => {

        let data = await apiManager.getDataToRequest();
        let html = await apiManager.makeRequest(data['key'], data['id'], comment)

        console.log(' -- from async html await func console->>> ',  html ); // тут переменная html == undefined

        return "done"
}


Возможно это из за того что makeRequest "емулирует" отправку формы с получениям обратно html страницы ?
  • Вопрос задан
  • 2556 просмотров
Пригласить эксперта
Ответы на вопрос 1
Xuxicheta
@Xuxicheta
инженер
Потому что Response.text возвращает промис
https://developer.mozilla.org/en-US/docs/Web/API/B...

делайте
.then(HtmlResult => HtmlResult.text())
.then(tmpHtml => {
            console.log('html result ->> ', tmpHtml);                                   
            return tmpHtml;
        })

-----------------------------------------------------------
let html = await apiManager.makeRequest(data['key'], data['id'], comment)

        console.log(' -- from async html await func console->>> ',  html ); // тут переменная html == undefined

А это потому что makeRequest у вас ничего не возвращает.
return забыли
makeRequest: (key, id, comment ) =>{
        return fetch(`url2`,{
            method: "POST",
.....
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы