await在JavaScript中是否保证无赋值的执行顺序?
主题。我可以说下面两段代码是相等的吗await在JavaScript中是否保证无赋值的执行顺序?,javascript,node.js,async-await,Javascript,Node.js,Async Await,主题。我可以说下面两段代码是相等的吗 await someFunc() // no assignment here doSomethingAfterSomeFunc() 以及: 我试过了,看起来它们是相等的,但有一个疑问(例如一些优化)是的,它们完全相同,或多或少是语法上的糖分。等待导致执行暂停,直到等待的承诺得到解决 有关更多信息,请参阅“重写承诺链”一节。要进一步展开(因为我花了一段时间才弄清楚自己的想法),我将介绍有关执行流的更多内容。实际上,使用await会阻止调用它的方法的流程,直到
await someFunc() // no assignment here
doSomethingAfterSomeFunc()
以及:
我试过了,看起来它们是相等的,但有一个疑问(例如一些优化)是的,它们完全相同,或多或少是语法上的糖分。等待导致执行暂停,直到等待的
承诺得到解决
有关更多信息,请参阅“重写承诺链”一节。要进一步展开(因为我花了一段时间才弄清楚自己的想法),我将介绍有关执行流的更多内容。实际上,使用await
会阻止调用它的方法的流程,直到它解决为止。假设我们有一个异步函数:
const someFunc = (str) => {
return new Promise(resolve => {
setTimeout(() => {
console.log('resolving promise')
resolve()
}, 1500)
})
}
所以如果我们用wait打电话,像这样:
console.log('before calling')
await someFunc()
console.log('after calling')
我们得到以下结果:
before calling
resolving promise
after calling
但是,当我们使用.then()
:
发生这种情况:
before then
after then
resolving promise
resolved
这是因为.then()
不会停止执行流,只有在前一个承诺完成时才运行链中的下一个函数。有时候你想这样,有时候你不想,有时候没关系。但如果你不知道这一点,可能需要一些时间才能弄清楚。所以我希望这个例子能帮助你理解它。不,优化不能弄乱语义。不用赋值就使用它安全吗?例如:等待某人的承诺来解决;归还某物;问题是:这一部分没有分配任务就忽略了这个案例。但我相信你是对的
console.log('before then')
someFunc().then(() => console.log('resolved'))
console.log('after then')
before then
after then
resolving promise
resolved