const middlewares = [
async function(ctx, next) {
console.log(ctx);
await next();
console.log(1);
},
async function(ctx, next) {
console.log(ctx);
await next();
}
];
function promis(middlewares) {
return function (context, next) {
let index = -1;
return dispatch(0);
function dispatch(i) {
index = i;
let fn = middlewares[i];
if (i === middlewares.length) fn = next;
if (!fn) return Promise.resolve();
return Promise.resolve(fn(context, dispatch.bind(null, i + 1)));
}
}
}
const p = promis(middlewares);
p({name: 'li'});