gpt4 book ai didi

javascript - Node Js不是异步的

转载 作者:太空宇宙 更新时间:2023-11-04 03:22:01 25 4
gpt4 key购买 nike

我有一个 Node js 应用程序,它有两个 GET 请求,例如 - 测试和延迟,

var express = require("express");
var app = new express();
app.use('/', express.Router());

app.get('/delay', function (req, res) {
for (var i = 0; i < 500000; i = i + 0.0001) {
let r = 'r';
}
res.json({ 'message' : 'delay message'});
})

app.get('/test', function (req, res) {
res.json({ 'message': 'hello world' });
})

app.listen(1337);

delay 方法执行并产生延迟的输出,例如大约 6-7 秒后,而 test 方法立即产生输出。

但是在 Postman 中测试时,如果我运行 delay 方法,并且在其完成之前运行 test,则 test 的输出不会出现,直到 delay 完成。仅在 delay 完成后,我才得到 test 的输出。

如何使这两个请求并行运行,彼此独立???

P.S: 我也尝试过路由器(express.Router()),但仍然是一样的。

谢谢!

最佳答案

delay 端点阻塞,这是一个占用服务器运行的单个线程的昂贵循环。您需要将对线程的控制权交给全局事件循环,以便它可以自由地接受新请求,并安排事件稍后发生。通常,您可以使用 setTimeout 来执行此操作,或使用其他需要回调的异步 API:

app.get('/delay', function (req, res) {
setTimeout(function () { res.json({ 'message' : 'delay message'}); }, 6000);
})

如果您确实有一项必须运行才能完成的昂贵任务,则需要研究线程或将其移动到通过套接字或其他方式与之通信的完全不同的进程中。

关于javascript - Node Js不是异步的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49028332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com