2012-12-10 59 views
0

我正在使用名爲node-github的NodeJS模塊,它是圍繞Github API的封裝,以獲取有關某些用戶的某些統計信息,例如他們的追隨者:正確的方法從使用鏈接標頭的API獲取所有頁面(使用JavaScript/NodeJS)

var getFollowers = function(user, callback) { 
    github.user.getFollowers(user, function(err, res) { 
    console.log("getFollowers", res.length); 
    callback(err, res); 
    }); 
}; 

... 

getFollwers({user: mike}, function(err, followers) { 
    if(err) { 
    console.log(err); 
    } 
    else { 
    console.log(followers); 
    } 
}); 

顯然,Github上限制通話效果爲最大的100(通過per_page參數),並利用the Link header讓你知道一個「下一頁」結果的存在。

我使用的模塊提供了幾種簡單的方法來處理鏈接標題,因此您不需要解析它。基本上,你可以打電話github.hasNextPage(res)github.getNextPage(res)(其中res是你從原來的github.user.getFollowers()呼叫收到的響應)

我正在尋找的是正確的方法/範式將我的函數返回所有結果,包括所有頁面。我用遞歸函數嘗試了一下,儘管它有效,但我不禁感覺可能會有更好的方法。

這個答案可以作爲一個很好的方法來處理所有未來的鏈接標題調用 - 不只是Github的 - 如果標準着手。

謝謝!

+0

你有沒有考慮建立發射追隨者定製可讀流? – AndyD

+0

@AndyD請你詳細說明一下嗎? –

回答

0

最後,採取了遞歸(記住遞歸的兩大缺點:維護它,並解釋它:))。這裏是我當前的代碼,如果有人有興趣:

var getFollowers = function(callback) { 
    var followers = [] 
    , getFollowers = function(error, result) { 
     followers = followers.concat(result); 
     if(github.hasNextPage(result)) { 
     github.getNextPage(result, getFollowers); 
     } 
     else { 
     callback(error, followers); 
     } 
    };    

    github.user.getFollowers(options, getFollowers); 
}; 

但是,我發現,如果你只需要跟隨者的總數,可以使用getLastPage函數來獲取最後一頁的追隨者的數量和然後

total_num_of_followers = num_of_followers_on_last_page +(total_num_of_pages * results_per_page)

相關問題