Node js Express 应用程序中使用 setTimeout 获取请求的并发性

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)

Pha*_*Vvs 5

感谢/sf/users/373123831/

我明白了它被阻止的原因。我正在用 chrome 测试这个。我正在从 Chrome 浏览器发出 get 请求,当我在 Firefox 中尝试相同的操作时,它按预期工作。

原因是因为这个

Chrome 会锁定缓存并等待查看一次请求的结果,然后再再次请求同一资源。

对同一资源发出多个请求时 Chrome 会停止运行?