Я пробую понимать, как оно функционирует await
/async
. Я прочитал несколько мнений, которые они заканчивают тем, что говорят
async
/await
это только syntax-sugar на Promises.
Однако, результат, который я получаю, сталкивается frontalmente с этим: я не способен объяснять выводы следующего кода (взятый оригинально отсюда).
function sleep( ms ) {
return new Promise( resolve => setTimeout( resolve, ms ) );
}
async function demo( ) {
console.log( 'Taking a break...' );
await sleep( 2000 );
console.log( 'Two seconds later' );
}
async function demo2( ) {
console.log( 'demo2 -> before' );
await demo( );
console.log( 'demo2 -> after' );
}
function demo3( ) {
console.log( 'demo3 -> before' );
demo2( );
console.log( 'demo3 -> after' );
}
demo3( );
Полученный результат:
demo3-> before
demo2-> before
Taking в break...
demo3-> after
... пауза 2 секунд...
Two seconds later
demo2-> after
Однако, ожидаемый результат этот другой:
demo3-> before
demo2-> before
Taking в break...
Two seconds later
demo2-> after
demo3-> after
Каким-то образом, который я не понимаю, использование async
/await
измени порядок возвратов! Мне не приходит в голову никакая форма, используя только callbacks и closures, что спровоцировал это поведение.
Из-за выводов, кажись, что функция demo3( )
возвратись прежде чем функция demo2( )
, что просто невозможно согласно классическому способу выполнения, которое я знаю.
Поскольку оно функционирует действительно async
/await
? Действительно возможность одинокая, чтобы использовать Promises? Впутываюсь я сам ища los 3 pies del gato
?