Я ожидаю, что вывод для следующего фрагмента будет 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/
Все, что я читал о обещаниях, указывает на то, что должна быть возможность получить желаемый порядок в такой «плоской» цепочке. Видимо я упускаю какую-то деталь? Может ли кто-нибудь помочь мне в правильном направлении?
Вот скрипт (http://www.es6fiddle.net/imu6vh1o/), как это сделать неплоским способом, но об этом труднее рассуждать, и это делает последовательное построение цепочки неудобным.
Я искал похожие проблемы с переполнением стека, но ни один из них не отвечает на вопрос в общем, используя простой пример (который я смог найти).
self.promiseChain = self.promiseChain.then...
? - person elclanrs   schedule 10.04.2016