Надо каждый Promise пропустить через catch и возвращать саму ошибку:
function apiRequest(success) {
return new Promise(function (resolve, reject) {
if (success) {
resolve(success);
} else {
reject('err');
}
})
.catch(function(err){
return err;
});
}
var p1 = apiRequest('1');
var p2 = apiRequest();
var p3 = apiRequest('2');
var p4 = apiRequest();
Promise.all([p1, p2, p3, p4])
.then(function(res){
console.log('Promise.all', res);
})
.catch(function(err){
console.error('err', err);
});
Результат:
Promise.all (4) ["1", "err", "2", "err"]