18 lines
389 B
JavaScript
18 lines
389 B
JavaScript
/**
|
|
* Utility to wrap an async function and ensure all invocations happen
|
|
* sequentially.
|
|
* @param fn the async function to run
|
|
* @return {Promise} a sequential version of the function
|
|
*/
|
|
export const sequential = fn => {
|
|
let promise
|
|
return async (...params) => {
|
|
if (promise) {
|
|
await promise
|
|
}
|
|
promise = fn(...params)
|
|
await promise
|
|
promise = null
|
|
}
|
|
}
|