簡體   English   中英

Node.js中使用異步模塊的問題

[英]issue using async module in Node.js

遇到問題時,感謝您的幫助。

我正在嘗試將所有異步功能收集在一起。 嘗試了async.parallel,async.each,gather-gm。 沒有任何事情使最終的回調工作。 這是更新的代碼(但仍無法正常工作):

var calls = [];

async.each(parser.allHrefs,function (href,callback) {

    getHtml(href,function(err, add){
        console.log("Passing data: " + href);

        if(err){
            return callback(err);
        };

        if(add){
            calls.push(href);
        };

        return callback();
    });
}, function (err) {
    if(err){
        console.log('something went wrong');
    }else{
        console.log('finished');
    };
}); 

和第一個功能:

function getHtml(link, callback) {    
  httpreq.get(link, function(err, res) {

    if(err) {            
      return callback(err);      
    }

    if(res.statusCode >= 300) {      
      return callback(null, false);       
    } else {
      //cut parsing code here...
      return callback(null, true);          
    }
  });
}

ps:我已經更新了幾次代碼。 在此示例中,我嘗試使用async.parallel。 事情是,當我什至沒有出錯時,我仍然沒有到達“ getLocations”功能。 代碼看起來比第一個版本要好得多,但是仍然無法正常工作。

您的gethtml函數中有幾個問題需要解決。

確保現在返回的所有地方都調用回調,例如

return callback(err)  

當您想傳達錯誤或

return callback(null,  result) 

當您想傳達成功並返回結果時。 切勿在未調用回調的情況下返回。

而不是在您通過它時刪除parser.allHrefs 您應該重構de getHtml只是為了知道是否可以添加鏈接。 像這樣:

function getHtml (link, callback) {    
    httpreq.get(link, function(err, res) {
        //the request has already finished executing here
        if(err) {      
            return callback(err);      
        }

        if(res.statusCode >= 300) {
            return callback(null,false);
        } else {
            //cut parsing code here...
            return callback(null,true);
        }
    });
};

這樣,當您調用gatherSecondLevelData函數時,將檢查是否添加鏈接,如下所示:

function gatherSecondLevelData (err) {
    var calls = [];

    async.each(parser.allHrefs,function (href,callback) {

        getHtml(href,function(err, add){

            if(err){
                return callback(err);
            };

            if(add){
                calls.push(href);
            };

            return callback();
        });
    }, function (err) {
        if(err){
            console.log('something went wrong');
        }else{
            console.log('finished');
        };
    });
};

暫無
暫無

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

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