[一些功能需要很长时间会发生什么?它们是异步的吗?

问题描述 投票:-1回答:2

假设我有类似的代码:

app.get('/url', (req, res) => {
  if (req.some_magic == 1) {
    do_1();
  }
});

function do_1() {
  let requests = get_requests();
  setTimeout(function() { request({
    "uri": "url",
    "method": "POST",
    "json": rq
  }, (err, res, body) => {
    do_1();
  })}, 1000})
}

基本上,对于到达/url的某些请求,我必须将一堆请求发送到某些服务。我如何才能使此异步,这样其他人来/url的其他请求就不必等待do_1完成了?或者Node已经像那样工作了?如果是,您是否需要任何快速解释或教程以了解其工作原理?我来自LEMP,所以完全不同。非常感谢。

javascript node.js
2个回答
1
投票

几乎所有涉及从Node外部获取数据的功能(例如网络请求或文件读取)都将使用异步功能。该函数的文档应该告诉您(或至少暗示它说该函数返回Promise或接受回调函数作为参数)。

您提供的示例显示request模块接受回调函数。

主要例外是明确定义为同步的函数(例如fileWriteSync。]

如果需要显式释放主事件循环,则可以使用worker thread。非常罕见,您需要执行此操作,而最主要的需求是在JS中执行CPU密集型计算时(这些计算不会移植到已经异步的库中)。


0
投票

您可以设置函数async,以便它不会阻止其他代码:app.get('/ url',(req,res)=> {如果(req.some_magic == 1){do_1();}});

async
© www.soinside.com 2019 - 2024. All rights reserved.