Async Promises in Sequence
Array.reduce() & for loop run in Sequence.
async function asyncSequence(promises, callback) {
const results = [];
const errors = [];
for (let promise of promises) {
try {
res = await promise;
results.push(res);
} catch (err) {
errors.push(err);
}
}
callback(results, errors);
}
function asyncSequence(promises, callback) {
const results = [];
const errors = [];
let completed = 0;
promises.reduce((prev, curr) => {
return prev.finally(() => {
return curr
.then((val) => {
results.push(val);
})
.catch((err) => {
errors.push(err);
})
.finally(() => {
completed++;
if (completed === promises.length) {
callback(results, errors);
}
});
});
}, Promise.resolve());
}
function createAsyncTask(value) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (value < 5) {
reject("Error: " + value);
} else {
resolve(value);
}
}, value * 1000);
});
}
let tasks = [
createAsyncTask(4),
createAsyncTask(1),
createAsyncTask(7),
createAsyncTask(2),
createAsyncTask(9),
createAsyncTask(6),
];
asyncSequence(tasks, (results, errors) => {
console.log("Result", results);
console.log("Error", errors);
});
// [7, 9, 6]
// (3) ['Error: 4', 'Error: 1', 'Error: 2']