【发布时间】:2016-04-10 06:31:51
【问题描述】:
我希望以下 sn-p 的输出为 1, 2, 3, 4。但是,实际的输出顺序是1, 4, 3, 2。
self.promiseChain = new Promise(function (resolve, reject) {
setTimeout(resolve, 4000);
}).then(function () {
console.log(1);
});
self.promiseChain.then(function () {
return new Promise(function (resolve, reject) {
setTimeout(resolve, 3000);
}).then(function () {
console.log(2);
});
});
self.promiseChain.then(function () {
return new Promise(function (resolve, reject) {
setTimeout(resolve, 2000);
}).then(function () {
console.log(3);
});
});
self.promiseChain.then(function () {
return new Promise(function (resolve, reject) {
setTimeout(resolve, 200);
}).then(function () {
console.log(4);
});
});
http://www.es6fiddle.net/imu5bhoj/
我读过的所有关于 Promise 的内容都表明应该可以在这样的“扁平”链中获得所需的顺序。显然我遗漏了一些细节?有人可以帮我指出正确的方向吗?
这里有一个小提琴 (http://www.es6fiddle.net/imu6vh1o/) 关于如何以非扁平方式进行操作,但它更难推理并使顺序链接变得尴尬。
我已经搜索了有关堆栈溢出的类似问题,但没有一个使用简单的示例(我可以找到)笼统地回答这个问题。
【问题讨论】:
-
你的意思是
self.promiseChain = self.promiseChain.then...? -
是的@elclanrs,看起来那是我的问题!
标签: javascript ecmascript-6 es6-promise