https://github.com/koajs/comp...
//源码链接
//koa 源码callback()中
const fn = compose(this.middleware);
fn(ctx).then(handleResponse).catch(onerror); //fn是compose后的结果,只传入了一个ctx,意味着下面返回函数的next参数为undefined
//compose
function compose (middleware) {
....
return function (context, next) { //使用时next参数并没有传入,该参数是否有必要?
// last called middleware #
let index = -1
return dispatch(0)
function dispatch (i) {
if (i <= index) return Promise.reject(new Error('next() called multiple times'))
index = i
let fn = middleware[i]
if (i === middleware.length) fn = next//是否可以去掉这行?因为js数组不考虑越界,当越界时是undefined ,next未被传入所以也是undefined
if (!fn) return Promise.resolve()
try {
return Promise.resolve(fn(context, function next () {
return dispatch(i + 1)
}))
} catch (err) {
return Promise.reject(err)
}
}
}
}
}