Я ожидаю, что выход для следующего фрагмента будет 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, похоже, что это была моя проблема! –