主题。我可以说下面的两段代码是相同的:
await someFunc() // no assignment here
doSomethingAfterSomeFunc()
和
someFunc().then(() =>
doSomethingAfterSomeFunc()
)
我试过,看起来它们是平等的,但有一个疑问(例如一些优化)
答案 0 :(得分:6)
是的,它们完全一样,或多或少是语法糖。等待导致执行暂停,直到等待的Promise
得到解决。
有关更多信息,请参阅Javascript async有关重写承诺链的部分。
答案 1 :(得分:5)
要扩展Dan D's answer(因为我花了一些时间来弄清楚自己),我会说一些关于执行流程的事情。实际上,使用await
会阻止调用它的方法流,直到它结算为止。假设我们有这个异步函数:
const someFunc = (str) => {
return new Promise(resolve => {
setTimeout(() => {
console.log('resolving promise')
resolve()
}, 1500)
})
}
所以如果我们等待,就像这样:
console.log('before calling')
await someFunc()
console.log('after calling')
我们得到以下结果:
before calling
resolving promise
after calling
但是,当我们使用.then()
:
console.log('before then')
someFunc().then(() => console.log('resolved'))
console.log('after then')
这种情况发生了:
before then
after then
resolving promise
resolved
这是因为.then()
不会停止执行流程,只有在前一个承诺完成后才会在链中运行下一个函数。有时候你希望这种情况发生,有时你却不这样做,有时它并不重要。但如果您不了解这一点,可能需要一些时间来弄明白。所以我希望这个例子可以帮助你理解它。