Просто чтобы убедиться, что я понимаю, как работает async/await
, я бы хотел кое-что подтвердить. Позвольте мне сначала создать пару функций:
let resolveAfter2Seconds = () => {
console.log("starting slow promise");
return new Promise(resolve => {
setTimeout(function() {
resolve(20);
console.log("slow promise is done");
}, 2000);
});
};
let resolveAfter1Second = () => {
console.log("starting fast promise");
return new Promise(resolve => {
setTimeout(function() {
resolve(10);
console.log("fast promise is done");
}, 1000);
});
};
Теперь возьмем эти два блока кода, например:
let concurrentStart = async () => {
console.log('==CONCURRENT START with await==');
const slow = resolveAfter2Seconds();
const fast = resolveAfter1Second();
console.log(await slow);
console.log(await fast);
}
Теперь, это так, что вышесказанное функционально эквивалентно этому:
let concurrentStart = async () => {
console.log('==CONCURRENT START with await==');
const slow = await resolveAfter2Seconds();
const fast = await resolveAfter1Second();
console.log(slow);
console.log(fast);
}
Другими словами, я могу либо поставить ключевое слово await
прямо перед вызовом функции await resolveAfter25Seconds()
, либо ... Я могу поместить await в журнал консоли, который запускает срабатывание этой функции - console.log(await slow);
.
Будет ли результат одинаковым в том смысле, что async / await будет работать одинаково в обоих случаях - и в этом случае вы могли бы достичь одного и того же с любым подходом?