簡體   English   中英

具有功能的節點異步

[英]Node Async with functions

我正在嘗試使用具有2個功能的異步模塊,這是代碼。 出了點問題, console.dir在起作用,但是函數(err,result)中的最后一個不起作用。 誰能幫我?

我要做的最后一步是呈現oftArrayFullInfooftNextInfo

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

您的主要問題是您沒有正確調用回調。

async回調和Node.js中的異步回調通常使用兩個參數:第一個用於傳遞任何錯誤(如果沒有錯誤,則為null ),第二個用於傳遞結果。

您僅使用第一個參數調用它們:

callback(oftArrayFullInfo);

這將使async認為該函數已失敗,這將導致最終回調的results不確定。 當您隨后嘗試訪問results.one ,將引發錯誤。

要解決此問題,您應該正確調用回調:

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

並且,正如已經建議的那樣,您應該取消注釋res.render()

最終,您還應該使輔助函數( auxFunctions.foofunc1auxFunctions.foofunc2 )遵循相同的調用約定。

好的,您做了所有正確的事情,除了當您將數據從re.render()發送到模板時,您必須發送鍵值對.so 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訪問這些值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM