我还在学习JavaScript的Promise
,但我遇到了一种我不理解的行为。
var o = $("#output");
var w = function(s) {
o.append(s + "<br />");
}
var p = Promise.resolve().then(function() {
w(0);
}).then(function() {
w(1);
});
p.then(function() {
w(2);
return new Promise(function(r) {
w(3);
r();
}).then(function() {
w(4);
});
}).then(function() {
w(5);
});
p.then(function() {
w(6);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="output"></div>
我希望这些语句按顺序执行,也就是说,输出应该是
0
1
2
3
4
5
6
相反,输出结果为
0
1
2
3
6
4
5
即使删除内部的Promise
,我认为仍然存在矛盾的结果。 1
在2
之前输出,但6
在5
之前输出。
有人能解释一下吗?
我注意到的一件事是每次重新分配p
都会给我们带来我期望的顺序。
then
方法才能控制 Promise 的执行顺序。 - elclanrsthen()
按顺序发生。 - dx_over_dtthen
。 - elclanrsnew Promise
直接调用您传递的函数作为参数,因此在2到3之间不可能执行任何排队作业。 - Matthijs