开发者

Javascript can't set variable value

I'm trying to get this function to set sortedScores to a value... whenever i do console.log anywhere it seems to store the values right, but it can't actually set sortedScores properly...

function facebook(sortedfriends) {

        var myID;
        var access_token;
   FB.init({
        appId  : something,
            status : true,
            cookie : true,
            xfbml  : true,
   });

   FB.getLoginStatus(function(response, sortedfriends) {
           if(!response.session) {
               FB.login(function(response) {
            开发者_开发技巧           myId = response.session.uid;
                       access_token = response.session.access_token;
                       //does stuff

                       if (!response.session) {
                           console.log('User cancelled login or did not fully authorize.');
                       }
                   });
           }
           else if(response.session) {
               myId = response.session.uid;
               access_token = response.session.access_token;
           var D = new Array();
               this.access_token = access_token;
               FB.api('/me/feed?access_token=' + access_token + '&limit=100', function(response, sortedfriends) {
               for( i=0; i<response.data.length; i++) {
                           var msg = response.data[i];
                           D.push(msg);
               }
                       sortedfriends = somefunction(D, myID);
                       //i know somefunction works because if i do console.log(sortedfriends) it shows me the right values...

               });

           }
   });
}

when i try var friends; facebook(friends); friends is just undefined... halp?


It is not clear where you are trying to access sortedfriends, but I'm guessing that your issue is that the Facebook login is asynchronous, so the response comes some time later after the facebook function has completed. Thus, if you're trying to use the sortedfriends data right after you call the facebook function, the data will not be there yet because the login call has not completed yet.

The only way to use the sortedfriends data is from the success handler to the login call (where your console.log already verifies that the data is there). If you want to use it in other code, then call that other code from the success handler to the login call. You cannot call that code right after calling the facebook function.

This logic will not work because of the asynchronous nature of the login call (it hasn't completed when the facebook call returns and execution continues after it:

var sortedfriends = [];
facebook(sortedfriends);
// use sortedfriends here

Instead, you have to do this type of structure:

var sortedfriends = [];
facebook(sortedfriends);
// nothing executes here

And, inside your facebook call where you have this, add a function call to whatever code you want to use the sortedfriends data:

       else if(response.session) {
           myId = response.session.uid;
           access_token = response.session.access_token;
       var D = new Array();
           this.access_token = access_token;
           FB.api('/me/feed?access_token=' + access_token + '&limit=100', function(response, sortedfriends) {
           for( i=0; i<response.data.length; i++) {
                       var msg = response.data[i];
                       D.push(msg);
           }
                   sortedfriends = somefunction(D, myID);
                   //i know somefunction works because if i do console.log(sortedfriends) it shows me the right values...
                   // call the rest of your code here that will use sortedfriends
                   doSomethingWithSortedFriends(sortedfriends);

           });


javascript functions do not change incoming references. You cannot pass undefined and expect it will become defined after the function executes.

Instead, you should make your sortedFriends a global variable and not pass it as function parameter. Please note, that the value of sortedFriends will be set after the ajax query inside getLoginStatus is executed, so you will not be able to use it immediately after you execute your facebook function.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜