function todolist(callbackList, timeout) { callbackList.reduce((promise, callback) => { return new Promise((resolve) => { promise.then(() => { callback(); setTimeout(resolve, timeout); }) }); }, Promise.resolve()) } todolist([ () => console.log(1, +new Date().getSeconds()), () => console.log(2, +new Date().getSeconds()), () => console.log(3, +new Date().getSeconds()), ], 2000);