我有这个代码:
function mainProcess(res) {
async.waterfall([
function(callback) {
postExportDefinition(requestParams, callback);
},
function(requestParams, callback) {
postSync(requestParams, callback);
},
function(requestParams, callback) {
checkSync(requestParams, callback);
},
function(body, callback) {
postUpdatedData(body, callback);
},
function(syncUri, callback) {
getSyncResponseInIntervals(syncUri, callback);
}
],
// the bonus final callback function
function(err, status) {
if (err) {
res.status(500)
.send({
error: "Error (best handling ever)"
});
return;
}
if (ageOffset < 100){
mainProcess();
}else{
res.send("Success: " + status);
console.log(status);
return;
}
});
}
res
是 undefined
我有点明白为什么,但是能够使用 res
的正确方法是什么? waterfall
内?
一种解决方案是在所有函数和所有回调中传递变量,但这根本不可扩展,我讨厌这样的解决方案。是唯一的吗?
另一个解决方案是使 res 成为整个脚本的全局变量,但同样感觉不对。
编辑:
res
仅在最后一次递归调用中未定义,我不明白它是否可以是res
对象已过期?我正在使用express
框架,最后一次调用发生在 60 秒后。
编辑2:
都是我的错,我打的是mainProcess
当年龄范围不合适时,也来自其中一项功能。那打破了它。这是一些遗留下来的代码。
最佳答案
除非最后一个函数中有一个未显示的参数名称 res 或同一函数中有一个新的 var res =
声明,否则 res 通过闭包可见
我看到 res 未定义的唯一方法是代码
if (ageOffset < 100){
mainProcess();
}
执行递归调用 mainProcess 函数而不传递 res
变量,该变量在该调用中将是未定义的
如果您需要递归调用和代码背后的逻辑,请按如下方式更改
if (ageOffset < 100){
mainProcess(res); // pass res again to mainProcess
}
关于javascript - NodeJs 父函数变量似乎超出了 async.waterfall 的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38454708/