2012-09-09 49 views
0

下面的代碼獲取一個Instagram用戶的關注者列表,並將它們組合到一個數組中,以便我可以在Express路由處理程序中返回它們。在node.js中傳遞多個嵌套回調的結果

這需要繼續運行,直到Instagram表示沒有更多結果可通過。該函數接受所需的「用戶標識」,必需的「access_token」,可選的「光標」和回調。

完全組合的數據已成功返回並且採用正確的JSON格式,但我無法將其恢復到快速處理程序。

如何將此信息傳遞迴快速處理程序?

var out_data = []; 
function getFollows(id,access_token,cursor,callback) { 
    if(cursor && cursor != 1) { 
    console.log('using cursor url with cursor: '+cursor); 
    var url = 'https://api.instagram.com/v1/users/'+id+'/follows?&access_token='+access_token+'&client_id='+client_id+'&cursor='+cursor; 
    } else { 
    console.log('using standard url'); 
    var url = 'https://api.instagram.com/v1/users/'+id+'/follows?&access_token='+access_token+'&client_id='+client_id+'; 
    } 
    request(url,function(err,res,body){ 
    var json = JSON.parse(body); 
    _.each(json.data,function(item){ 
     out_data.push(item); 
    }); 
    if(json.pagination.next_cursor) { 
     getFollows(id,access_token,json.pagination.next_cursor,function(adata){ 
      out_data.push(adata); 
     }); 
    } 
    if(!json.pagination.next_cursor) { 
     callback(out_data); 
     //console.log(out_data); 
    } 
    }); 
}; 

回答

0

路由處理程序取決於getFollows()需要的結果是在傳遞給getFollows()作爲它的回調函數的部分。基本上,getFollows()的調用需要是處理程序中的最後一個語句。

+0

爲什麼?/你可以用代碼示例顯示你的意思嗎? –