Промисы можно вкладывать друг в друга путём возврата нового промиса из обработчика then (если я правильно понял проблему, покажу на примере):
new Promise((resolve, reject) => {
setTimeout(() => {
console.log('операция 1');
resolve({ op1: true }); /* data for next handler */
}, 1000);
})
.then(data => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('операция 2');
data.op2 = true; /* update data */
resolve(data);
}, 1000);
})
})
.then(data => console.log('операция 1 и 2 выполнены', data)) /* { op1: true, op2: true } */
.catch(err => console.log('ошибка в операции 1 или 2', err));