作者:兰州老头_337 | 来源:互联网 | 2023-01-13 13:09
学科。我可以说下面的两段代码相等吗:
await someFunc() // no assignment here
doSomethingAfterSomeFunc()
和:
someFunc().then(() =>
doSomethingAfterSomeFunc()
)
我尝试过,看起来它们是相等的,但是有一个疑问(例如,一些优化)
1> 小智..:
为了扩展Dan D的答案(因为我花了一段时间才弄清楚自己),我将讲一些关于执行流程的更多信息。确实,using await
阻止了方法的流程,直到解决为止。假设我们有这个异步功能:
const someFunc = (str) => {
return new Promise(resolve => {
setTimeout(() => {
console.log('resolving promise')
resolve()
}, 1500)
})
}
因此,如果我们用await进行呼叫,如下所示:
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()
仅当前一个诺言完成时,才停止执行流程并在链中运行下一个函数。有时您希望这种情况发生,有时您不希望发生,有时并不重要。但是,如果您对此一无所知,可能需要一些时间才能解决。因此,我希望这个例子可以帮助您理解它。
2> Dan D..:
是的,它们是完全一样的,或多或少是语法糖。等待导致执行暂停,直到Promise
解决了等待。
有关更多信息,请参见Javascript async一节中的重写诺言链。