我期望以下代碼段的輸出爲1, 2, 3, 4
。但是,實際的輸出訂單是1, 4, 3, 2
。ES6承諾執行訂單
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/
一切我讀過有關承諾,表明它應該可以得到這樣的「平」鏈中所需的順序。顯然我錯過了一些細節?有人能幫助我指出正確的方向嗎?
這是一個小提琴(http://www.es6fiddle.net/imu6vh1o/)如何以非平坦的方式做到這一點,但很難推理,並使順序鏈接尷尬。
我已經在堆棧溢出上搜索了類似的問題,但他們都沒有回答這個問題,一般使用一個簡單的例子(我可以找到)。
您的意思是'self.promiseChain = self.promiseChain.then ...'? – elclanrs
Yup @elclanrs,看起來像是我的問題! –