Asyn c запрос в реагировать на редукцию с использованием async / await - PullRequest
0 голосов
/ 26 апреля 2020

Я новичок в React, и я пытаюсь сделать вызов Api на сервер, а затем использую эти данные в своем компоненте.

Я пытаюсь использовать asyn c, ожидайте обработки * асинхронный

const onNotifReceived = async (res) => {
    var updatedQueue = res.updatedQueue;
    updatedQueue["queueNewState"] = await getContactDetails(authClient, res.updatedQueue.queueNewState);
    console.log(JSON.parse(JSON.stringify(updatedQueue)))
    notifyQueue(updatedQueue); // redux dispatcher
}

Я заметил, что console.log(JSON.parse(JSON.stringify(updatedQueue))) запускается раньше других console.logs внутри функции getContactDetails.

Но, как я знаю, await должен дождаться ответа перед передачей к следующей строке, которая не соответствует случаю, и проблема в том, что я не получаю updatedQueue["queueNewState"] новое состояние.

1 Ответ

1 голос
/ 26 апреля 2020

Возможно getContactDetails() не возвращают обещание, но в нем есть отложенные операции.

async function xd() {
    await xdd();
    console.log("after xdd");
}
function xdd() {
    setTimeout(() => {
        console.log("1000 later");
    }, 1000);
}
xd();
// after xdd
// (after 1 second)
// 1000 later
async function xd() {
    await xdd();
    console.log("after xdd");
}
function xdd() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log("1000 later");
            resolve();
        }, 1000);
    });
}
xd();
// (after 1 second)
// 1000 later
// after xdd

Для первой ситуации xdd выполняется до console.log("after xdd"); , но console.log("1000 later"); выйдет через 1 секунду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...