Цепочки промисов в JavaScript

Пусть у нас есть следующий промис:

let promise = new Promise(function(resolve, reject) { setTimeout(function() { resolve('string'); }, 3000); });

По завершению промиса выведем его результат в консоль:

promise.then( function(result) { console.log(result); // выведет 'string' } )

Давайте теперь не будем сразу выводить результат, а как-то изменим его и вернем через return:

promise.then( function(result) { return result + '!'; } );

В этом случае мы можем к результату нашего then применить еще один then, создав тем самым цепочку методов. При этом в результат следующего метода будет попадать то, что вернул через return предыдущий:

promise.then( function(result) { return result + '!'; } ).then( function(result) { console.log(result); // выведет 'string!' } );

Таким образом можно построить цепочку какой-угодно длины:

promise.then( function(result) { return result + '1'; } ).then( function(result) { return result + '2'; } ).then( function(result) { return result + '3'; } ).then( function(result) { console.log(result); // выведет 'string123' } );
enru