functioncompose (middleware) {
if (!Array.isArray(middleware)) thrownewTypeError('Middleware stack must be an array!')
for (const fn of middleware) {
if (typeof fn !== 'function') thrownewTypeError('Middleware must be composed of functions!')
}
/**
* @param {Object}context
* @return {Promise}
* @api public
*/returnfunction (context, next) {
// last called middleware #let index = -1return dispatch(0)
functiondispatch (i) {
if (i <= index) returnPromise.reject(newError('next() called multiple times'))
index = i
let fn = middleware[i]
console.log('i: ' + i, next);
if (i === middleware.length) fn = next
console.log(fn);
if (!fn) returnPromise.resolve()
try {
returnPromise.resolve(fn(context, dispatch.bind(null, i + 1)));
} catch (err) {
returnPromise.reject(err)
}
}
}
}
var middleware = []
asyncfunctiona(ctx, next) {
console.log(1);
await next();
console.log(2);
}
asyncfunctionb(ctx, next) {
console.log(3);
await next();
console.log(4);
}
asyncfunctionc(ctx, next) {
console.log(5);
await next();
console.log(6);
}
middleware.push(a,b,c);
var aaa = compose(middleware);
aaa({});