Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
await在JavaScript中是否保证无赋值的执行顺序?_Javascript_Node.js_Async Await - Fatal编程技术网

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