在node.js中实现嵌套异步调用

时间:2018-05-31 18:34:23

标签: javascript node.js asynchronous callback

节点noobie在这里。在进行了大量搜索和阅读大量文章,帖子和Stackoverflow讨论之后,我在node.js中实现嵌套异步调用时仍然陷入困境。以下是我正在尝试实施的方案:

我的代码收到一个事件以打开第三方CSV文件。打开文件后,必须验证内容。如果数据有效,则会将其持久保存到后端数据存储中。验证规则的任何例外都必须存储在后端的单独错误日志中。

我已经将解决​​方案模块化为单独的函数:一个函数用于打开文件,下一个函数用于验证文件内容,下一个函数用于持久化内容,最后一个函数用于保存由此生成的最终错误验证功能。

这些功能中的每一个都会产生一定的延迟,这就需要使用回调。但是因为回调的嵌套可以深入几个层次,所以我试图保持我的代码浅,并分离关注点并将逻辑划分为单独的模块/函数。现在,当我试图将它们串在一起时,我无法实现正确的回调逻辑。

例如,我的顶级模块看起来像这样:

module.exports = {
  openFile: (filePath) => {
    // code to open file and load the content
    readAndParseFile(fileContent, validateAndReturnStatus);
  }
}

function readAndParseFile(fileContent, next) {
  // code to parse file content into rows of data
  next(rows, persistValues);
}

function validateAndReturnStatus(rows, next) {
  // code to validate
  if(valid) {
    persistValues(row, sendResponse);
  }
}

function persistValues(row, next) {
  //code to persist validated data
  next('success');
}

function sendResponse(status) {
  console.log(status);
}

上面是一个非常简化的伪代码,但我希望它能说明我的意图。我的问题是:嵌套不可避免的潜在函数的最可靠,最正确的方法是什么,并确保批处理在处理结束时等待正确的状态?

感谢。

0 个答案:

没有答案