kha*_*iuk 8 javascript node.js async-await
学科。我可以说下面的两段代码相等吗:
await someFunc() // no assignment here
doSomethingAfterSomeFunc()
Run Code Online (Sandbox Code Playgroud)
和:
someFunc().then(() =>
doSomethingAfterSomeFunc()
)
Run Code Online (Sandbox Code Playgroud)
我尝试过,看起来它们是相等的,但是有一个疑问(例如,一些优化)
小智 7
为了扩展Dan D的答案(因为我花了一段时间才弄清楚自己),我将讲一些关于执行流程的更多信息。确实,using await阻止了方法的流程,直到解决为止。假设我们有这个异步功能:
const someFunc = (str) => {
return new Promise(resolve => {
setTimeout(() => {
console.log('resolving promise')
resolve()
}, 1500)
})
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我们用await进行呼叫,如下所示:
console.log('before calling')
await someFunc()
console.log('after calling')
Run Code Online (Sandbox Code Playgroud)
我们得到以下结果:
before calling
resolving promise
after calling
Run Code Online (Sandbox Code Playgroud)
但是,当我们使用时.then():
console.log('before then')
someFunc().then(() => console.log('resolved'))
console.log('after then')
Run Code Online (Sandbox Code Playgroud)
有时候是这样的:
before then
after then
resolving promise
resolved
Run Code Online (Sandbox Code Playgroud)
这是因为.then()仅当前一个诺言完成时,才停止执行流程并在链中运行下一个函数。有时您希望这种情况发生,有时您不希望发生,有时并不重要。但是,如果您对此一无所知,可能需要一些时间才能解决。因此,我希望这个例子可以帮助您理解它。
| 归档时间: |
|
| 查看次数: |
2919 次 |
| 最近记录: |