const sleep=require('./utils/sleep') //js洋葱模型,支持异步async function compose (middleware) { return async function () { let args = arguments await dispatch(0); async function dispatch (i) { const fn = middleware[i] if (!fn) return null await fn( ...args,async function next () { await dispatch(i + 1) }) } } } //demo let middleware = [] middleware.push(async (next) => { console.log(0) await next() console.log(3) }) middleware.push(async (next) => { console.log(1) await sleep(2000) await next() console.log(1.1) }) middleware.push(() => { console.log(2) }) const func=compose(middleware) func()