koa middleware call sequence test - dongyuwei/blog GitHub Wiki
var koa = require('koa');
var assert = require('assert');
var app = koa();
//see https://github.com/koajs/koa/blob/master/test/application.js#L73
var callStack = [];
app.use(function *(next){
callStack.push(1);
yield next;
callStack.push(6);
});
app.use(function *(next){
callStack.push(2);
yield next;
callStack.push(5);
});
app.use(function *(next){
callStack.push(3);
yield next;
callStack.push(4);
});
app.use(function *(){
this.body = yield getCallStackThunk();
});
function getCallStack(callback) {
setTimeout(function() {
console.log('before processed');
assert.deepEqual(callStack, [1,2,3])
callback(null, callStack);
console.log('after processed');
assert.deepEqual(callStack, [1,2,3,4,5,6])
}, 0);
}
//see http://blog.stevensanderson.com/2013/12/21/experiments-with-koa-and-javascript-generators/
function getCallStackThunk() {
return function(callback) {
getCallStack(callback);
};
}
app.listen(3000);