koa的執(zhí)行順序第一次看,肯定會(huì)混亂,官方文檔也只是介紹了yield next的執(zhí)行順序内斯,如果我們有自己的異步操作呢?順序是怎樣像啼?讓我們簡(jiǎn)單演示一下
var koa = require('koa');
var app = koa();
var fs = require('co-fs');
// x-response-time
app.use(function *(next){
console.log('========begin==========');
// (1) 進(jìn)入路由
console.log(1)
yield next;
console.log(8);
console.log('========end==========')
});
// logger
app.use(function *(next){
console.log(2)
yield new Promise((resolve) => {
setTimeout(() => resolve(), 3000);
});
console.log(3);
yield next;
console.log(5);
let result = yield fs.readFile('./node_modules/@types/node/index.d.ts', 'utf8');
console.log(6);
result = yield new Promise((resolve) => {
setTimeout(() => resolve(), 3000);
});
console.log(7);
});
// response
app.use(function *(){
console.log(4);
this.body = 'Hello World';
});
app.listen(10000);
打開chrome瀏覽器俘闯,連續(xù)發(fā)送請(qǐng)求,觀察執(zhí)行順序與結(jié)果