Создание цепочек промисов
Одним из примуществом промисов является то, что они позволяют создавать цепочки промисов. Так, ранее мы рассмотрели применение методов then()
и catch()
для получения и обработки результатов и ошибок асинхронной операции. При выполнении эти методы генерируют новый объект Promise
, для которого мы также можем вызвать методы then()
и catch()
, таким образом построить цепочку промисов. Благодаря этому мы можем обрабатывать подряд
несколько асинхронных операций - одна за другой.
Пусть у нас есть следующий промис:
let promise = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve("string");
}, 3000);
});
По завершению промиса выведем его результат в консоль:
promise.then(function (result) {
// выведет 'string'
console.log(result);
});
Давайте теперь не будем сразу выводить результат, а как-то изменим его и вернем через return
:
promise.then(function (result) {
return result + "!";
});
В этом случае мы можем к результату нашего then
применить еще один then
, создав тем самым цепочку методов. При этом в результат следующего метода будет попадать то, что вернул через return
предыдущий:
promise
.then(function (result) {
return result + "!";
})
.then(function (result) {
// выведет 'string!'
console.log(result);
});
Таким образом можно построить цепочку какой-угодно длины:
promise
.then(function (result) {
return result + "1";
})
.then(function (result) {
return result + "2";
})
.then(function (result) {
return result + "3";
})
.then(function (result) {
// выведет 'string123'
console.log(result);
});