节点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);
}
上面是一个非常简化的伪代码,但我希望它能说明我的意图。我的问题是:嵌套不可避免的潜在函数的最可靠,最正确的方法是什么,并确保批处理在处理结束时等待正确的状态?
感谢。