Discuss / JavaScript / 调用顺序

调用顺序

Topic source
const Koa=require('koa');
const app=new Koa();
app.use(async (ctx, next) => {
    console.log('第一1');
    await next(); // 调用下一个middleware
    console.log('第一2');
});

app.use(async (ctx, next) => {
    console.log('第二1');
    await next(); // 调用下一个middleware
    console.log('第二2');
});

app.use(async (ctx, next) => {
    console.log('第三1');
    await next();
    console.log('第三2');
});
app.listen(3000);
输出顺序:
第一1
第二1
第三1
第三2
第二2
第一2

雨chenghe

#3 Created at ... [Delete] [Delete and Lock User]

为啥我的结果是这样的 :

第一1 第二1 第三1 第三2 第二2 第一2 第一1 第二1 第三1 第三2 第二2 第一2

好像多走了一遍!

張偉Pisces

#4 Created at ... [Delete] [Delete and Lock User]

是因为浏览器多请求了一个东西,就是下面这个

favicon.ion 这个

lonelykid1984

#5 Created at ... [Delete] [Delete and Lock User]

这个运行机制很奇怪,感觉像是同步的单线程运行一样了。之前纯粹的http模块运行机制是很清楚的。如果可以的话,希望能讲解下大概的运行机制。

viper1090

#6 Created at ... [Delete] [Delete and Lock User]

厉害?,用这个demo可以加深理解koa2,感谢。app.use 和 await next() 也是对闭包的很好解释。

hm @ hm in ~/hello-koa [15:16:41] C:1

$ npm start

hello-koa@1.0.0 start /Users/hm/hello-koa node --use_strict app.js

第一1 第二1 第三1 第三2 第二2 第一2

我用你代码实验了下,没有出现多余的

-Q-J-Y-

#8 Created at ... [Delete] [Delete and Lock User]

像是递归了

伍丰来了

#9 Created at ... [Delete] [Delete and Lock User]

感觉这样和同步调用没有区别啊。都是被调用的函数执行完,再继续执行外层的函数。异步在哪里呢?

湖东呀

#10 Created at ... [Delete] [Delete and Lock User]

这就是koa强调的洋葱模型


  • 1
  • 2

Reply