Skip to content

koa middleware call sequence test

dongyuwei edited this page Mar 12, 2014 · 4 revisions
var koa = require('koa');
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 getCallStacktackThunk();//[1,2,3,4,5,6]
});

function getCallStacktack(callback) {
    setTimeout(function() {
        callback(null, callStack);
    }, 0);
}

//see http://blog.stevensanderson.com/2013/12/21/experiments-with-koa-and-javascript-generators/
function getCallStacktackThunk() {
    return function(callback) {
        getCallStacktack(callback);
    };
}

app.listen(3000);

Clone this wiki locally