29. implement async helper - `sequence()`
Share
medium - accepted / - tried
This problem is similar to 11. what is Composition? create a pipe().
You are asked to implement an async function helper, sequence()
which chains up async functions, like what pipe()
does.
All async functions have following interface
type Callback = (error: Error, data: any) => voidtype AsyncFunc = ( callback: Callback, data: any) => void
Your sequence()
should accept AsyncFunc array, and chain them up by passing new data to the next AsyncFunc through data in Callback.
Suppose we have an async func which just multiple a number by 2
const asyncTimes2 = (callback, num) => { setTimeout(() => callback(null, num * 2), 100)}
Your sequence()
should be able to accomplish this
const asyncTimes4 = sequence( [ asyncTimes2, asyncTimes2 ])asyncTimes4((error, data) => { console.log(data) // 4}, 1)
Once an error occurs, it should trigger the last callback without triggering the uncalled functions.
Follow up
Can you solve it with and without Promise?