В дополнение к другим ответам синтаксис ES2015 плавно сочетается с обещаниями, уменьшая еще больший код шаблона:
// Sequentially:
api1()
.then(r1 => api2(r1))
.then(r2 => api3(r2))
.then(r3 => {
// Done
});
// Parallel:
Promise.all([
api1(),
api2(),
api3()
]).then(([r1, r2, r3]) => {
// Done
});