const Queue = (onResolve:any, onReject:any) => { const items:any = [] const dequeue = () => { // no work to do if (!items[0]) return items[0]() .then(onResolve) .catch(onReject) .then(() => items.shift()) .then(dequeue) } const enqueue = (func:any) => { items.push(func) if (items.length === 1) dequeue() } return enqueue } ------------------- const enqueue = Queue( (resp:any) => console.log('success: ', resp), (resp:any) => console.error('error: ', resp) ) -------------------- enqueue(() => axios.get("http://localhost:3000/2000"))