带有setTimeout的GET请求的节点js Express app中的并发性 [英] Concurrency in node js express app for get request with setTimeout

查看:23
本文介绍了带有setTimeout的GET请求的节点js Express app中的并发性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Console log Image

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆