Javascript 当某些函数花费很长时间时会发生什么?它们是异步的吗?

Javascript 当某些函数花费很长时间时会发生什么?它们是异步的吗?,javascript,node.js,Javascript,Node.js,假设我有这样的代码: 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, r

假设我有这样的代码:

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
完成?或者节点已经像那样工作了?如果是的话,你有任何快速的解释或教程,我可以看看,以了解这是如何工作的?我来自莱姆普,所以它非常不同。非常感谢。

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

您给出的示例显示了接受回调函数的
请求
模块

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


如果需要显式释放主事件循环,则可以使用。很少有人需要这样做,主要需要在JS中执行CPU密集型计算(这些计算没有外包给已经异步的库)。

请参阅。这就是几乎所有http API的构建方式(使用承诺)。上述http调用将被异步调用。您不应使用
setTimeout
检查任何调用的结果。改用本机承诺对象。有关如何执行此操作,请参阅链接上的答案。
或Node已按此方式工作?
Node已按此方式工作。在调用
请求(…)
(err,res,body)=>{do_1();}
之间,进程可以自由处理新的传入请求,并运行更多在后台处理I/O的异步函数。这是否回答了您的问题?