节点异步功能

时间:2017-03-31 07:27:13

标签: node.js async.js

我尝试使用具有2个功能的异步模块,这是代码。有错误, console.dir 正在运行,但函数中的最后一个(错误,结果)无法正常工作。任何人都可以帮助我吗?

我要做的最后一步是渲染 oftArrayFullInfo oftNextInfo

async.parallel({
        one: function(callback){
            auxFunctions.foofunc1(foo1, foo1, function(oftArrayFullInfo){
                console.log("****** ASYNC 1 ARRAY");
                console.dir(oftArrayFullInfo);
                callback(oftArrayFullInfo);
            });
        },
        two: function(callback){
            auxFunctions.foofunc2(foo1, foo1, function(oftNextInfo){
                console.log("****** ASYNC 2 ARRAY");
                console.dir(oftNextInfo);
                callback(oftNextInfo);
            });
        }
    },
    function(err, results){
        console.log("****** RENDER 1");
        console.dir(results.one);
        console.log("****** RENDER 2")
        console.dir(results.two);
        //res.render('myView', {title: 'Job Info', oftArrayFullInfo}, {title: 'Next Jobs Info', oftNextInfo});
    });

2 个答案:

答案 0 :(得分:1)

您的主要问题是您没有正确调用回调。

一般来说,

async回调和Node.js中的异步回调有两个参数:第一个用于传递任何错误(如果没有,则为null),第二个一个用于传递结果。

你只用第一个参数调用它们:

callback(oftArrayFullInfo);

这将使async认为函数失败,这将导致最终回调中的results未定义。当您随后尝试访问results.one时,将引发错误。

要解决此问题,您应该正确调用回调:

callback(null, oftArrayFullInfo)
callback(null, oftNextInfo)

并且,正如已建议的那样,您应取消注释res.render()

最后,您还应该使辅助功能(auxFunctions.foofunc1auxFunctions.foofunc2)遵守相同的调用约定。

答案 1 :(得分:0)

好的,你做的一切正确,除非你从re.render()发送数据到你的模板,你必须发送密钥,值对。所以intead

res.render('myView', {title: 'Job Info', oftArrayFullInfo}, {title: 'Next Jobs Info', oftNextInfo});

你应该使用

res.render('myView', {title: 'Job Info', arrayFullInfo : oftArrayFullInfo}, {title: 'Next Jobs Info', nextInfo : oftNextInfo});

现在您可以使用模板中的键名称arrayFullInfo和nextInfo访问这些值