javascript - NodeJs 父函数变量似乎超出了 async.waterfall 的范围

标签 javascript node.js

我有这个代码:

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;
        }
    });
 }

resundefined我有点明白为什么,但是能够使用 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/

相关文章:

javascript - Elasticsearch .js : ReferenceError: require is not defined

javascript - 使用 Froala 编辑器按空格键时 Sweet alert 2 关闭

javascript - 如何门面(代理)websocket 端口

javascript - MySql、NodeJS、ExpressJS 和 bcrypt : what is the best way to handle users' login?

javascript - 如何从 javascript 中的字符串中删除包含内容的 HTML 标记(不是特定标记)

javascript - html:基于电子邮件的价格列表

Javascript:关闭弹出窗口

javascript - MongoDB 元素顺序

javascript - 缓存并避免重新加载 html、css 和 js 文件

javascript - 解析 js - 无法接收用户字段