Node.js异步函数没有回调块主线程?

时间:2017-02-17 09:21:42

标签: javascript node.js asynchronous callback blocking

所以我注意到在对我的Node.js应用程序进行了一些最近的更改后,服务器在一些请求后停止响应。我想我已经找到了罪魁祸首,但想确认一下。

所以我有一个函数在使用后从文件系统中删除文件,我真的不关心文件删除的响应,所以我只是忽略它。

所以我想说我有这个功能:

removeFileAtPath(filePath, callback) {
  fs.unlink(filePath, (err) => {
    if (callback) {
      return callback(err)
    }
  });
}

这是从中间件函数调用的,因此通常会像这样调用:

uploadFile(req, res, next) {
  // Do something
  removeFileAtPath(path, (error) => {
     if (error) { /* handle error */ }
     res.send(someResponse)
  });
}

但由于我不关心函数响应,我将removeFileAtPath函数称为:

uploadFile(req, res, next) {
  // Do something
  removeFileAtPath(path);    // No callback passed in here
  res.send(someResponse);
}

像这样的东西会阻塞主循环还是我的问题可能在其他地方?

2 个答案:

答案 0 :(得分:0)

尝试在中间件末尾调用next()函数

答案 1 :(得分:0)

不,它不会阻止 - 如果你的意思是主线程和事件循环 - fs.unlinkSync会阻止这种意义。

但是您仍然需要确保返回响应调用下一个中间件 - 否则您将"阻止"即使线程和事件循环不会在通常意义上被阻止,服务请求也会被服务,您的服务器仍然可以处理其他请求和事件。