0

グループのすべてのメンバーを取得するために、facebook の fql を呼び出します。最初の関数で allmembers をチェックすると、問題なく動作しますが、2 番目の関数で呼び出すと、「未定義」が返されます。

function getAllMembers(groupid){
              var allmembers = new Array();
              var content = document.getElementById('content-text');
              FB.api({
                method: 'fql.query',
                query: 'select uid from group_member where gid =' + groupid
              },
              function(resp){
                for (var i=0, l= resp.length; i<l; i++)
                {
                 allmembers[i] = resp[i].uid;
                }
                return allmembers;
              }
              )    
    }

    function retrieveMessages(groupid){
        var allmembers;
        allmembers = getAllMembers(groupid);
        console.log(allmembers);     
    }

どこが間違っているのか分かりません。

4

2 に答える 2

2

APIgetAllMembers()を使用して非同期関数呼び出しを行っているように見えます。つまり、FB 呼び出しが完了する前に戻ります。FBgetAllMembers()

以下に示すように、この問題を解決するには、コールバック関数を使用する必要があります

function getAllMembers(groupid, callback){
    var content = document.getElementById('content-text');
    FB.api({
        method: 'fql.query',
        query: 'select uid from group_member where gid =' + groupid
    },  function(resp){
        var allmembers = new Array();
        for (var i=0, l= resp.length; i<l; i++)
        {
            allmembers.push( resp[i].uid);
        }
        callback(allmembers)
    })    
}

function retrieveMessages(groupid){
    getAllMembers(groupid, function(allmembers){
        console.log(allmembers);     
    });
}
于 2013-04-27T11:02:40.477 に答える
0

推測では、呼び出しは非同期です。つまりgetAllMembers、成功関数 ( ) が実行される前に戻りますfunction(resp){}...

console.log内部を移動してみてくださいfunction(resp)...

var allmembers = new Array();

function getAllMembers(groupid){
          var allmembers = new Array();
          var content = document.getElementById('content-text');
          FB.api({
            method: 'fql.query',
            query: 'select uid from group_member where gid =' + groupid
          },
          function(resp){
            for (var i=0, l= resp.length; i<l; i++)
            {
             allmembers[i] = resp[i].uid;
            }
            console.log(allmembers);     
          }
          );    
}

function retrieveMessages(groupid){
    getAllMembers(groupid);
}
于 2013-04-27T11:01:54.720 に答える