簡體   English   中英

node.js異步瀑布模塊回調

[英]node.js async waterfall module callbacks

我有這樣的node.js代碼

async.waterfall([
    function(callback){
        category = [{"id":1,"name":xxx},{"id":2,"name":yyy}];
        callback(null,category);
    },
    function(category,callback){
        var categoryData ={};
        _.each(category,function(item){
            categoryData[item.id] = item;        
            SolrClient.select(query,function(data){
                //data is the response from SolrClient
                categoryData[item.id]["data"] = data;
                log(categoryData);   //log1 
            },callback);
            log(categoryData);  //log2
        });
        log(categoryData); //log3
    }
]);

log1 => the data that I have added to categoryData is logged correctly
log2 => I cant get the data that is logged in the callback function to SolrClient
log3 => same as log2

我知道這與變量范圍有關,或者SolrClient的回調無法訪問_.each之前初始化的同一categoryData

我浪費了很多時間調試它,但我想我正在做一些小錯誤,我沒有得到如何解決。

如果您調整日志以包含每個日志的唯一消息(例如當前旁邊的評論),它們可能會以特定的,可能是意外的順序出現:

log2
log2
log3
log1
log1

您遇到的問題不是范圍; 這是時機之一。 不僅立即或同步與-功能可以被稱為隨時_.each()也是“ ”或異步如,但SolrClient.select()

要確保在繼續之前完成SolrClient.select()所有查詢,可以將_.eachasync.forEach

//...
function(category, waterfallCallback) {
    var categoryData = {};

    async.forEach(category, function (item, forEachCallback) {
        categoryData[item.id] = item;

        SolrClient.select(query, function (data) {
            categoryData[item.id]["data"] = data;
            forEachCallback(null);
        });
    }, function (err) {
        waterfallCallback(null, categoryData);
    });
}
//...

暫無
暫無

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

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