Pha*_*Vvs 1 concurrency settimeout node.js
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}`);
});
Run Code Online (Sandbox Code Playgroud)
如果我同时点击 get 请求 http://localhost:4444 三次,那么它会返回如下日志
got request
done
got request
done
got request
done
Run Code Online (Sandbox Code Playgroud)
由于节点事件循环和回调队列位于进程线程外部,它不应该以下面的方式返回输出吗?(也许我错了,但需要对 Nodes 内部结构有一些了解)和 Node 中的外部 api 请找到附图 Javascript 运行时环境
got request
got request
got request
done
done
done
Run Code Online (Sandbox Code Playgroud)
我明白了它被阻止的原因。我正在用 chrome 测试这个。我正在从 Chrome 浏览器发出 get 请求,当我在 Firefox 中尝试相同的操作时,它按预期工作。
原因是因为这个
Chrome 会锁定缓存并等待查看一次请求的结果,然后再再次请求同一资源。
| 归档时间: |
|
| 查看次数: |
672 次 |
| 最近记录: |