2016-06-28 66 views
1

基本上我有一個方法從一個API中獲取值並工作,但在async.parallel中,列出的結果都是未定義的。節點異步 - 工作異步方法返回內部未定義async.parallel

這裏的方法:

function getNumberOfSharesFromFacebookApi(url ,callback) { 

    request(facebookApiUrl + url + '&format=json', function (error, response, body) { 
    let res = 0; 

    if (!error && response.statusCode == 200) { 
     try { 
     res = JSON.parse(body)[0]['total_count']; 
     } catch(err) { } 
    } 
    callback(res); 
    }); 
} 

這裏的異步調用:

async.parallel ([ 
    callback => { 
    getNumberOfSharesFromFacebookApi(urlsToTest[0], callback); 
    }, 
    callback => { 
    getNumberOfSharesFromFacebookApi(urlsToTest[1], callback); 
    }, 
    callback => { 
    getNumberOfSharesFromFacebookApi(urlsToTest[2], callback); 
    }, 
    callback => { 
    getNumberOfSharesFromFacebookApi(urlsToTest[3], callback); 
    } 
], 
(err, results) => { 
    console.log(results); 
}); 
+0

Async.js希望您使用節點回調約定,其中第一個參數表示錯誤。你的'getNumberOfSharesFromFacebookApi'函數沒有這樣做。 – Bergi

回答

1

您所查詢的功能,將作爲回調的第二個參數的響應。請求使用節點樣式回調,其中第一個參數是錯誤。

function getNumberOfSharesFromFacebookApi(url ,callback) { 
    request(facebookApiUrl + url + '&format=json', function (error, response, body) { 
     if(error) return callback(error); //callback on error 
     let res = 0; 

     if (!error && response.statusCode == 200) { 
     try { 
      res = JSON.parse(body)[0]['total_count']; 
     } catch(err) { } 
     } 
     callback(null, res); 
    }); 
    }