function createAsyncTask() {
const value = Math.floor(Math.random() * 10);
return new Promise((resolve, reject) => {
setTimeout(() => {
if (value < 5) reject( Error ${value});
else resolve(value * 1000);
}, value * 1000);
});
}
const tasks = [
createAsyncTask(),
createAsyncTask(),
createAsyncTask(),
createAsyncTask(),
createAsyncTask(),
createAsyncTask(),
];
function asyncSequence(tasks, callback) {
let results = [];
let error = [];
let completed = 0;
tasks.reduce((prev, curr) => {
return prev.finally(() => {
return curr
.then((value) => results.push(value))
.catch((error) => error.push(error))
.finally((value) => {
completed++;
if (completed === tasks.length) callback(error, results);
});
});
}, Promise.resolve());
}
Example 2 :
async function asyncSequence2(tasks, callback) {
let result = [];
let errors = [];
for (let task of tasks) {
try {
let res = await task;
results.push(res);
}
catch (error) {
errors.push(error);
}
}
callback(errors, result);
}
asyncSequence2(tasks, (error, result) => {
console.log("error", error);
console.log("result", result);
});