【发布时间】:2021-04-06 17:32:22
【问题描述】:
const express = require('express');
const app = express();
const port = 4444;
app.get('/', async (req, res) => {
console.log('got request');
await new Promise(resolve => setTimeout(resolve, 10000));
console.log('done');
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
如果我同时点击 get request http://localhost:4444 三次,那么它会返回如下日志
got request
done
got request
done
got request
done
由于节点事件循环和回调队列在进程线程之外,它不应该以下面的方式返回输出吗? (也许我错了,但需要对节点内部有一些了解)和节点中的外部 api 请找到附图 Javascript Run time environment
got request
got request
got request
done
done
done
【问题讨论】:
-
是的,它应该和它完全按照你提到的方式做,在浏览器中检查,ibb.co/g4P40Sc 不仅如此,它在常规快递 js 应用程序中也做同样的事情! ibb.co/YpxNGTj
-
@programcoder19 很奇怪,但是当我运行相同的东西时,我得到了这个作为输出 [link]ibb.co/mDMR0qf
-
它是节点版本吗?我使用的是 12.3.1 版
-
没有用最新的节点版本测试过,没有返回预期的输出
标签: node.js concurrency settimeout