【发布时间】:2020-09-13 21:04:05
【问题描述】:
我正在阅读关于nodejs promise here的文章。
然后我尝试运行以下示例代码(来自文章)
const p = Promise.resolve();
(async () => {
await p; console.log('after:await');
})();
p.then(() => console.log('tick:a'))
.then(() => console.log('tick:b'));
节点版本之间的结果不一致。节点 v10 远离所有其他版本。
我正在使用 mac。
v8.17.0
after:await
tick:a
tick:b
v10.20.1
tick:a
tick:b
after:await
v12.17.0
after:await
tick:a
tick:b
v14.3.0
after:await
tick:a
tick:b
文章说 v10 引入了一项重大更改以更正执行顺序,而 v8 的行为是一个错误。但是,当我使用 v12 和 v14 进行测试时,它们给出的结果与 v8 相同。
谁能解释一下为什么会这样?
【问题讨论】:
-
@jfriend00 这篇文章是关于节点 v10 中的重大更改。它说 nodev10 实现了 v8 的正确规范和行为是一个错误。但是,当我使用 v12、v14 进行测试时,它们给出的结果与 v8 相同。我应该在我的问题中包含这些信息
-
this 是另一个问题(来自我)。我对此一无所知,但我认为他们之间可能有关系
-
祝你好运解决这些求知欲问题。出于好奇,我会遵循答案,但我更喜欢编写我的代码,因此如果需要在 Promise 链之间进行特定排序,那么代码会以声明方式强制按其编写方式进行排序,而不依赖于这一级别的引擎实现细节。
-
一直在尝试在不使用
async/await的情况下重新创建不同的行为,但我编写的所有内容似乎都会产生节点 8/12/14 的行为,即使在节点 10 中也是如此。我我倾向于说节点 8 实际上按照当前规范执行了正确的行为。对我来说,那篇文章似乎是说在版本 10 和 12 之间对规范中的程序进行了修改,所以旧规范中的 8 是错误的,旧规范中的 10 是正确的,而 12 和 14 是正确的新规范。
标签: node.js async-await es6-promise