Is Promise.all
causing failures when you need to make 100s of asynchronous network calls? Do you get random file errors when writing multiple files at the same time? Do you need your async methods to be called in a specific order?
Node's Promise.all
method will run all of your async methods in parallel which can cause network or file system errors. The method also prevents you from guaranteeing what order the functions are called. YASPR aims to solve these issues by
npm install yaspr
TypeScript
import { sequentialPromises } from "yaspr";
interface Params {
name: string;
timeout: number;
}
// Tracks the number of times the function was called
let count = 0;
// Async function that will will wait the designated timeout, print stuff, and return the number of times this function was called
async function someAsyncFunction(params: Params) {
return await new Promise<number>(resolve => {
setTimeout(() => {
count += 1;
console.log(`Name: ${params.name}, Timeout: ${params.timeout}`);
resolve(count);
}, params.timeout);
});
}
async function run() {
// Promise.all will resolve the shortest timeouts first.
// YASPR will resolve in the order they are received.
const params: Array<Params> = [
{ name: "Michael", timeout: 1000 },
{ name: "Jim", timeout: 500 },
{ name: "Pam", timeout: 750 },
{ name: "Dwight", timeout: 501 }
];
console.log("Running using `Promise.all`. Output order based on timeout");
console.log(await Promise.all(params.map(someAsyncFunction)));
count = 0;
console.log("Running promises sequentially");
console.log(await sequentialPromises(params, someAsyncFunction));
}
(async () => await run())();
git clone https://MikeWestbrook@dev.azure.com/MikeWestbrook/MikesNodeModules/_git/yaspr
npm run build
npm run watch
Runs a simple example.
npm run sample