Почему синхронное использование setTimeout останавливает код при использовании await? - PullRequest
0 голосов
/ 12 октября 2018

Следующий код вводит только «до истечения времени ожидания» и «в пределах», но не «после времени ожидания».почему это?

async function asy() {
   console.log('before timeout');
   await awa();
   console.log('after timeout');
}

async function awa() {
   return new Promise(resolve => {setTimeout(function(){console.log('within');}, 600);
}

asy();

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

Вы не разрешили Обещание после возврата, и поэтому вывод

async function asy() {
   console.log('before timeout');
   await awa();
   console.log('after timeout');
}

async function awa() {
   return new Promise(resolve => {
        setTimeout(function(){
           console.log('within');
           resolve();
   }, 600);
}

asy();

await ждет, пока Promise не станет resolved или rejected, прежде чем выполнить следующие выражения

0 голосов
/ 12 октября 2018

вам не нужна асинхронность перед функцией awa ():

async function asy() {
    console.log('before timeout');
    await awa();
    console.log('after timeout');
}

function awa() {
  return new Promise(
    resolve => {
        setTimeout(function(){console.log('within'); resolve();}, 600);
    });
}

asy();
0 голосов
/ 12 октября 2018

Потому что вы никогда не выполняете обещание, поэтому оно висит навсегда.

return new Promise(resolve => {setTimeout(function(){console.log('within');}, 600);
                   ^^^^^^^
                  NEVER USED
...