начинающий асинхронный / жду вопросов - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь понять async / await. Пожалуйста, найдите два скриншота с вопросом в виде приложений.

На вопрос 1: ждет, ждет выпуска или отклонит. Это правильно? enter image description here enter image description here Спасибо за ответы. С уважением

1 Ответ

0 голосов
/ 06 марта 2019

Две версии вашего кода практически эквивалентны.Любая функция, объявленная с использованием ключевого слова async, возвращает обещание.

Например, следующая функция, несмотря на то, что она не имеет ничего общего с обещанием, возвращает обещание:

async function helloWorld() {
    return "Hello World";
}

Мы можем проверить это следующим образом

> helloWorld().then(result => console.log(result));
Hello World

Как подсказывает ключевое слово async, мы указываем среде выполнения JavaScript, что она должна запускать функцию асинхронно.Поскольку вызывающая функция должна немедленно получить результат при выполнении чего-то вроде let result = helloWorld(), result содержит Обещание, которое в конечном итоге преобразуется в возвращаемое значение helloWorld() (или будет отклонено, если helloWorld() выдает ошибку).

Итак, в вашем коде почти нет разницы между верхней версией (result = await new Promise...) и нижней версией (result = new Promise...): в обоих случаях ваша функция asyncData() вернет Promiseкоторый в конечном итоге разрешает данные запроса или отклоняет его в случае сбоя.

Существует одно небольшое отличие.В верхней версии кода, которая выполняет result = await new Promise..., строки 23 и 24 будут выполняться только после строк 6-22, поэтому вы увидите «Успешный повторный вызов», прежде чем увидите «Возврат обещания».В нижней версии кода, которая выполняет result = new Promise..., строка 23 будет выполнена немедленно, поэтому сначала вы увидите «Успешный вызов покоя».

Причина этого различия заключается в том, что оператор awaitпохоже на размещение каждой строки после оператора await в блоке then.Пример ниже иллюстрирует это.

async function returnsAPromise() {
    return Promise.resolve("Hello World");
}

// this will log the result first.
async function withAwait() {
    const result = await returnsAPromise();
    console.log(result);
    console.log("rest of function");
}

// this is equivalent to the function above, because of the way await works.
function withEquivalentThen() {
    const result = returnsAPromise();
    result.then(r => {
      console.log(r);
      console.log("rest of function");
    });
}

// this version logs "rest of function" first.
function dontWaitForPromiseThen() {
    const result = returnsAPromise();
    result.then(r => console.log(r));
    console.log("rest of function");

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