dx_*_*_dt 13 javascript promise
我还在学习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);
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="output"></div>Run Code Online (Sandbox Code Playgroud)
我希望这些语句按顺序运行 - 也就是说,输出就是
0
1
2
3
4
5
6
Run Code Online (Sandbox Code Playgroud)
相反,输出是
0
1
2
3
6
4
5
Run Code Online (Sandbox Code Playgroud)
即使去除内在Promise也会给我带来矛盾的结果. 1之前输出2,但6之前输出5.
谁可以给我解释一下这个?
我注意到的是p每次重新分配给我们的预期顺序.
Sco*_*pey 29
你6早期看到的原因是你没有链,你分支.
当你打电话时p.then().then().then(),你有一系列必须以正确顺序执行的承诺.
但是,如果你打电话p.then().then(); p.then(),你有2个承诺附加p- 基本上创建一个分支,第二个分支将与第一个分支一起执行.
您可以通过确保将它们链接在一起来解决此问题 p = p.then().then(); p.then();
仅供参考,你几乎不想分支,除非你把它们重新组合在一起(例如Promise.all),或者故意创造一个"火与忘记"的分支.
| 归档时间: |
|
| 查看次数: |
8196 次 |
| 最近记录: |