Не могу получить данные из выборки - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь вызвать вызов, и это работает, но когда я пытаюсь получить результат из другой функции, я всегда получаю неопределенное значение.

Это мой код:

const fetch_output = async (data) => {
await fetch("execute_command", {
    method: "POST",
    credentials: "same-origin",
    headers: {
        "X-CSRFToken": getCookie("csrftoken"),
        "Accept": "application/json",
        "Content-Type": "application/json"
    },
    body: JSON.stringify(data)
}).then(function(response) {
    return response.json()
}).then(function(response) {
    console.log(response)
    //I get the correct response here
    return response
}).catch(function(ex) {
    console.log("Ha habido algún error: ", ex)
})
}

const write_outputs = async () => {
for (const platform_id of platforms_ids) {

    const data = {
        platform_id:platform_id,
        command:command
    }

    await fetch_output(data).then((resp)=>{
        console.log(resp)
        //I get undefined
    })
}
}

write_outputs()

Я попробовал все, но я просто не знаю, что я делаю не так.

Ответы [ 2 ]

1 голос
/ 24 января 2020

это потому, что функция asyn c возвращает обещание, которое разрешается в возвращаемое значение из функции

(async () => {})().then(value => console.log("value = ", value)); // undefined
(async () => {return 1})().then(value => console.log("value =" , value)); // 1

, поскольку вы ничего не возвращаете из fetch_output, оно разрешается в неопределенное значение

Вы должны вернуться из функции fetch_output вместо использования await. Кроме того, поскольку fetch уже является обещанием, вы можете использовать обычную функцию вместо asyn c one

0 голосов
/ 24 января 2020

Поскольку вы звоните await fetch_output(), вам не следует использовать .then() для получения его результата. Бросьте await.

Почему? await заменяет function().then().catch() на result = await function() в способе обработки Promise или асинхронной функции c. Используйте await или .then(), но не оба.

...