带有setTimeout的GET请求的节点js Express app中的并发性 [英] Concurrency in node js express app for get request with setTimeout
本文介绍了带有setTimeout的GET请求的节点js Express app中的并发性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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
推荐答案
感谢https://stackoverflow.com/users/5330340/phani-kumar
我知道它被阻塞的原因了。我在用铬合金测试这一点。我正在从Chrome浏览器发出GET请求,当我在Firefox中尝试相同的请求时,它按预期工作。
原因就是因为这个
Chrome锁定缓存并等待查看一个请求的结果,然后再次请求相同的资源。
Chrome stalls when making multiple requests to same resource?
这篇关于带有setTimeout的GET请求的节点js Express app中的并发性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文