【发布时间】:2017-06-28 08:21:44
【问题描述】:
在将 Chrome 升级到 58 之前,我没有任何错误。
进一步说明:我的代码在周日工作,我不知道执行的异步性质,两天后才知道!
new Promise((s, f) => {
console.log(1);
s();
console.log(2);
})
.then(r => {console.log(3)})
console.log(4);
输出:
1
2
4
3
1- 为什么在 console.log(2) 之后执行 'then' ???
可能的答案:因为promise结果会在body返回后执行
2- 为什么在 console.log(4) 之后执行 'then' ???
【问题讨论】:
-
Promise 不应该是同步的。想象一下解析器/拒绝器是
setTimeout(function () {...}),你会得到基本相同的行为。 -
我的所有测试浏览器(firefox/chrome/edge/opera)都有相同的顺序。对于第一个问题我不知道,但是 3 出现在 4 之后似乎是逻辑的,就像在常规异步调用中一样,后面的代码在回调之前执行。
-
@PatrickRoberts 对,但是我的代码在周日工作,我不知道执行中的异步性质,今天发现了这个,很有趣!
标签: javascript promise es6-promise