promiseSettle() , settle(), . .settle() , :
, promiseSettle(), promises , promises :
function promiseSettle(promises) {
return new Promise(function(resolve) {
var remaining = promises.length;
var results = new Array(remaining);
function checkDone() {
if (--remaining === 0) {
resolve(results);
}
}
promises.forEach(function(item, index) {
if (typeof item.then === "function") {
item.then(function(value) {
results[index] = {state: "fulfilled", value: value};
checkDone();
}, function(err) {
results[index] = {state: "rejected", value: err};
checkDone();
});
} else {
results[index] = {state: "fulfilled", value: item}
--remaining;
}
});
if (remaining === 0) {
resolve(results);
}
});
}
, :
function promiseSettleAll(promises) {
return promiseSettle(promises).then(function(results) {
for (var i = 0; i < results.length; i++) {
if (results[i].state !== "fulfilled") {
throw results[i].value;
}
}
return results.map(function(item) {return item.value;});
});
}