Так что это моя попытка ответить на мой собственный вопрос только с помощью кода. Мои выводы
1) Я бы не согласился с утверждением, что return await
является избыточным вне блоков try / catch. Это изменит возвращаемое значение example()
, если вызвано с await
2) Помещение await
в последнем утверждении гарантирует, что если I await example()
что-либо вызванное будет выполнено после того, как functionReturningAPromise()
разрешится (как указывал @Kristianmitk).
3) Вызов асинхронной функции с помощью await
действительно НЕ работает как Promise.all
, если внутри нее запущено несколько обещаний (а не внутри await
).
См. Результаты тестов. 3/4/5 Я получаю журнал медленной асинхронной функции после Я получаю результат.
function asyncSlow(testName){
return new Promise(resolve => {
setTimeout(() => {
console.log('slow is done from' + testName)
resolve('slow-' + testName);
}, 300);
});
}
function asyncFast(testName){
return new Promise(resolve => {
setTimeout(() => {
console.log('fast is done from' + testName)
resolve('fast-' + testName);
}, 100);
});
}
async function test1(){
await asyncSlow('test1')
await asyncFast('test1')
}
async function test2(){
await asyncSlow('test2')
return await asyncFast('test2')
}
async function test3(){
asyncSlow('test3')
return await asyncFast('test3')
}
async function test4(){
asyncSlow('test4')
return asyncFast('test4')
}
async function test5(){
asyncSlow('test5')
asyncFast('test5')
}
async function main(){
const res = await test1()
console.log('res = ' + res)
const res2 = await test2()
console.log('res2 = ' + res2)
const res3 = await test3()
console.log('res3 = ' + res3)
const res4 = await test4()
console.log('res4 = ' + res4)
const res5 = await test5()
console.log('res5 = ' + res5)
}
main()
А вот как выглядит результат:
slow is done fromtest1
fast is done fromtest1
res = undefined
slow is done fromtest2
fast is done fromtest2
res2 = fast-test2
fast is done fromtest3
res3 = fast-test3
fast is done fromtest4
res4 = fast-test4
res5 = undefined
slow is done fromtest3
fast is done fromtest5
slow is done fromtest4
slow is done fromtest5