Я играл с async / await и обнаружил странное несоответствие в поведении, в зависимости от того, где вызывается await.
function test(msg) {
return new Promise(accept => {
console.log('in promise ', msg);
setTimeout(() => {
console.log('in timeout ', msg);
accept();
}, 1000)
});
}
async function run() {
await test('a');
await test('b');
}
run();
выводит
in promise a
in timeout a
in promise B
in timeout B
, что ожидается. Однако, если я переместу await в функцию «test», результат будет изменен очень неожиданным образом:
async function test(msg) {
const promise = new Promise(accept => {
console.log('in promise ', msg);
setTimeout(() => {
console.log('in timeout ', msg);
accept();
}, 1000)
});
await promise;
}
function run() {
test('a');
test('B');
}
run();
Выходы
in promise a
in promise B
in timeout a
in timeout B
Может, кто-нибудь объяснит поведение во втором случае? Спасибо.