2011-09-06 55 views
0

我有一个Facebook API的问题。我可能不会采用这种最好的方式,但这里是我所拥有的。回应的Facebook API回调

我有一个request_ids数组,我需要将其转换为用户ID。 我有一个while循环查询请求ID并获取用户ID。

function (response) { 
    var requestsToSend = new Array(); 
    var i = 0; 

    while (i < response.request_ids.length) 
    { 
     FB.api('/'+response.request_ids[i], function(res){ 
      requestsToSend[i] = res['to']['id']; 
     }); 
     i++; 
    } 
    console.log(requestsToSend[0], requestsToSend[1], requestsToSend[2], requestsToSend[3]); 
} 

这工作正常。但是,当我回显返回的id(console.log)时,它们未定义,因为FB.api尚未返回值/响应。

只有在FB.api返回值时,才有办法触发console.log? 我真的不想设置一个定时器来触发该功能。

+0

我认为水库是一个对象,你使用的资源作为一个数组。 – munjal

+0

res是一个json对象 – atmd

回答

0

㈣固定的问题,但不是非常满意的解决方案

function (response) { 

      var requestsToSend = new Array(); 
      var i = 0; 
      var arry = new Array(); 


         FB.api('/'+response.request_ids[0], function(res){ 
          if(typeof res['to'] != 'undefined'){ 
           useResults(res['to']['id']); 
          } 
         }); 

         FB.api('/'+response.request_ids[1], function(res){ 
          if(typeof res['to'] != 'undefined'){ 
           useResults(res['to']['id']); 
          } 
         }); 

         FB.api('/'+response.request_ids[2], function(res){ 
          if(typeof res['to'] != 'undefined'){ 
           useResults(res['to']['id']); 
          } 
         }); 

         FB.api('/'+response.request_ids[3], function(res){ 
          if(typeof res['to'] != 'undefined'){     
           useResults(res['to']['id']); 
          } 
         }); 

       function useResults(value){ 
        arry.push(value); 
        timeToFire(arry); 
       } 

       function timeToFire(arry){ 

        if(arry.length == response.request_ids.length){ 
         //console.log(arry); 
         playTheGame(arry[0], arry[1], arry[2], arry[3]); 
        } 
       } 
     } 
0

把你的console.log呼叫响应函数:

function (response) { 
    var requestsToSend = new Array(); 
    var i = 0; 
    while(i < response.request_ids.length) { 
     FB.api('/'+response.request_ids[i], function(res){ 
      requestsToSend[i] = res['to']['id']; 
      console.log(requestsToSend[i]); 
     }); 
     i++; 
    }  
} 
+0

我知道你的建议有效,但它不帮助我。我知道什么是返回的值,但我需要使用它们,一旦它们都返回 – atmd

+0

所以首先定义一个数组来存储它们,如: var finalRequests = [] 然后替换控制台。在我的例子中的日志代码: finalRequests.push(requestsToSend [i]) 当代码退出while循环的底部时,您将有一系列请求可供使用。 – slashwhatever