Неправильная последовательность возвратов используя async/await

Я пробую понимать, как оно функционирует 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 ?

9
задан 06.03.2019, 16:22
0 ответов