Given two Promises P and Q, the following code produces a new Promise that executes Q after P is fulfilled:
P.then(()=>Q);
Note that this is similar to the semicolon for synchronous code: Sequential composition of the synchronous operations f() and g() looks as follows:
f();g();
Если результатом выполнения P.then(onFulfilled, onRejected) является новый объект Promise Q, то на нем можно продолжать вычисления, вызывая Q.then(onFulfilled, onRejected).
Если возвращаемый из Promise объект R имеет метод then, то возвращаемый Promise Q делегирует then-реакцию на R:
Resolve with error
Если значение R возвращается из catch то оно становится нормальным начальным значением по умолчанию для Q:
Выбрасываемые исключения из P при любой реакции делегируются на Q.catch:
Может быть несколько последовательных реакций then. Тогда ошибка передается до тех пор, пока не будет найден обработчик на одном из производных Promise: