根据Understanding the node.js event loop, node .js支持单线程模型.这意味着如果我向一个 node 发出多个请求.js服务器,它不会 for each 请求生成新线程,但会逐个执行每个请求.这意味着如果我对 node 中的第一个请求执行以下操作.js代码,同时 node 上出现一个新请求,第二个请求必须等到第一个请求完成,包括5秒的睡眠时间.正当

var sleep = require('sleep');
    sleep.sleep(5)//sleep for 5 seconds

有没有一种方法可以解决这个问题.js可以 for each 请求生成一个新线程,这样第二个请求就不必等待第一个请求完成,或者我可以只调用特定线程上的sleep吗?

推荐答案

如果您指的是npm模块sleep,它在自述文件中指出,sleep将阻止执行.所以你是对的——这不是你想要的.相反,您希望使用setTimeout,它是非阻塞的.下面是一个例子:

setTimeout(function() {
  console.log('hello world!');
}, 5000);

对于任何希望使用es7 async/await实现这一点的人,这个例子应该会有所帮助:

const snooze = ms => new Promise(resolve => setTimeout(resolve, ms));

const example = async () => {
  console.log('About to snooze without halting the event loop...');
  await snooze(1000);
  console.log('done!');
};

example();

Node.js相关问答推荐

为什么我的表单数据在我的POST请求中作为应用程序/json发送,为什么它返回错误请求错误?

NPM:一般的npm二进制依赖可以静态构建吗?

Puppeteer 的 BrowserFetcher 发生了什么?

一个大型的单个 Redis 实例可以处理所有事情,还是多个 Redis 实例?

在 NodeJS 中使用 post 时出现错误 500TypeError: 无法解构 'req.body' 的属性 'name',因为它未定义

如何修复node.js中的错误代码无法加载资源:服务器响应状态为403(禁止)

密码加密的最佳实践是什么?

Cloudflare 522 错误 - javascript 客户端连接到 node 服务器

处理 UTC 日期和future

Zod 模式中的self 数组

如何在不使用位置运算符 $ 的情况下更新 mongodb 文档中数组中的嵌套文档?

'{ id: string; 类型的参数}' 不可分配给FindOneOptions类型的参数

类 WebSwapCGLLayer 在 Mac OS X /System 和 node_modules 中都实现了

如果我使用像 express 这样的 node 服务器,是否需要 webpack-dev-server

为什么 JavaScript 的 parseInt(0.0000005) 打印5?

将 myproject/.npmrc 与注册表一起使用

JSHint 是否支持异步/等待?

Puppeteer 记录在 page.evaluate

使用 node.js 循环 JSON

nodemon + express,监听端口=?