Жду после обещания - PullRequest
       2

Жду после обещания

0 голосов
/ 14 сентября 2018

Я хотел бы подключить mongoDb и выполнить код асинхронно.

async function test() {
    let task = asyncTask() //return a promise
    //function still running
    await task
    //code executed only if task is resolved
}

Использование await, как это правильно?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

async / await

async : Слово async перед function означает одну простую вещь:функция всегда возвращает обещание.

await : Ключевое слово await заставляет JavaScript ждать, пока это обещание выполнится и возвращает его результат.

Здесь

  async function test() {
    let task = asyncTask() //return a promise
    //function still running
    await task
    //code executed only if task is resolved
}  

Функция выполняет «паузу» в строке (await task) и возобновляет работу после выполнения обещания, а task становится его результатом.

Подчеркнем: await буквально заставляет JavaScript ждать, пока обещание не выполнится, а затем переходить к результату.

Если обещание разрешается нормально, тогда ожидание возвращает result.Но в случае отказа он выдает error.

1. Либо, как уже сказано в answer Мы должны отловить эту ошибку, используя try..catch

async function test() {
    let task = asyncTask()
    //function still running
    try {
        await task
   } catch (err){
       throw new Error(err);
    }
}

2. Если у нас нет try..catch, то обещание, сгенерированное вызовом асинхронной функции test(), будет отклонено.Мы можем добавить .catch для обработки:

async function test() {
        let task = asyncTask() //return a promise
        //function still running
        await task
        //code executed only if task is resolved
    } 
 test().catch(//error);

Подробнее Если .catch нет, то мы получаем необработанную ошибку обещания.Мы можем отследить такие ошибки, используя глобальный обработчик событий .

0 голосов
/ 14 сентября 2018

Да, если вы используете await с асинхронной функцией, код будет блокироваться до тех пор, пока обещание не будет выполнено или не выполнено.Вам следует заключить блок await в ловушку try для обработки любых ошибок.

async function test() {
    let task = asyncTask()
    //function still running
    try {
        await task
        //code executed only if task is resolved
    } catch (err){
        //Something went wrong
        throw new Error(err);
    }
}

Использование async / await имеет те же функции, что и обещание, но обеспечивает более синхронный способ написания кода.

Если вы хотите переписать код как обещание, он будет выглядеть так:

function test() {
    myPromise('some arguments')
    .then(result => console.log(`Task completed: ${result}`);)
    .catch(err => console.error(err));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...