javascript - Code only works if I alert out before the code that's bombing out? -
this freakin weird me. if don't
function bindalbumandphotodata() { // array of user's albums var aalbums = getallalbums(userid, token); alert("aalbums: " + aalbums); if (aalbums == null || aalbums == "undefined") return; // set default albumid var defaultalbumid = aalbums[0].id; };
so undefined error on line var defaultalbumid = aalbums[0].id; if don't uncomment alert("aalbums: " + aalbums);
what heck? if comment out alert("aalbums: " + aalbums); undefined var defaultalbumid = aalbums[0].id;
this weird. i've been working night figure out why kept getting undefined aalbum[0] , add alert used have above it, fine...makes no sense me.
here's full code of getallalbums:
function getallalbums(userid, accesstoken) { var aalbums = []; // array var uri = "/" + userid + "/albums?access_token=" + accesstoken; alert("uri: " + uri); fb.api(uri, function (response) { // check valid response if (!response || response.error) { alert("error occured"); return; } (var = 0, l = response.data.length; < l; i++) { alert("album #: " + + "\r\n" + "response.data[i].id: " + response.data[i].id + "\r\n" + "response.data[i].name: " + response.data[i].name + "\r\n" + "response.data[i].count: " + response.data[i].count + "\r\n" + "response.data[i].link: " + response.data[i].link ); aalbums[i] = new album( response.data[i].id, response.data[i].name, response.data[i].count, response.data[i].link ); alert("aalbums[" + + "].id : " + aalbums[i].id); } }); return aalbums; }
so i'm not returning array until hit callback of fb.api async call don't see how defaultalbumid = aalbums[0].id; line of code executing before have valid array of data back. when put in alert, ovbvioulsly it's delaying before hits line defaultalbumid = aalbums[0].id; causing guess luckily have data beacuse async fb.api call done again don't see how that's possible have issue when i'm waiting call before proceeding on , returning array aalbums in bindalbumandphotodata() method.
update #3
function bindalbumandphotodata() { getallalbums(userid, accesstoken, function (aalbums) { alert("we're , should have data"); if (aalbums === null || aalbums === undefined) { alert("array empty"); return false; } var defaultalbumid = aalbums[0].id; // set default albumid var defaultalbumid = aalbums[0].id; // bind album dropdown alert(" defaultalbumid: " + defaultalbumid); }); }; function getallalbums(userid, accesstoken, callbackfunctionsuccess) { var aalbums = []; // array var uri = "/" + userid + "/albums?access_token=" + accesstoken; fb.api(uri, function (response) { // check valid response if (!response || response.error) { alert("error occured"); return; } (var = 0, l = response.data.length; < l; i++) { alert("album #: " + + "\r\n" + "response.data[i].id: " + response.data[i].id + "\r\n" + "response.data[i].name: " + response.data[i].name + "\r\n" + "response.data[i].count: " + response.data[i].count + "\r\n" + "response.data[i].link: " + response.data[i].link ); aalbums[i] = new album( response.data[i].id, response.data[i].name, response.data[i].count, response.data[i].link ); alert("aalbums[" + + "].id : " + aalbums[i].id); } // pass array callback function sent param getallalbums method here callbackfunctionsuccess(aalbums); }); }
it's not hitting alert in callback. must still doing wrong here.
update #4 - reason it's not hitting fb.api callback now.
function getallalbums(userid, accesstoken, callbackfunctionsuccess) { var aalbums = []; // array var uri = "/" + userid + "/albums?access_token=" + accesstoken; alert("uri: " + uri); fb.api(uri, function (response) { // check valid response if (!response || response.error) { alert("error occured"); return; } (var = 0, l = response.data.length; < l; i++) { alert("album #: " + + "\r\n" + "response.data[i].id: " + response.data[i].id + "\r\n" + "response.data[i].name: " + response.data[i].name + "\r\n" + "response.data[i].count: " + response.data[i].count + "\r\n" + "response.data[i].link: " + response.data[i].link ); aalbums[i] = new album( response.data[i].id, response.data[i].name, response.data[i].count, response.data[i].link ); alert("aalbums[" + + "].id : " + aalbums[i].id); } alert("about pass array callback function"); // pass array callback function sent param getallalbums method here callbackfunctionsuccess(aalbums); }); }
function bindalbumandphotodata() { // array of user's albums getallalbums(userid, token, function(aalbums){ // set default albumid var defaultalbumid = aalbums[0].id; }); };
and in getallalbums function call success function when have data back
//********* after break *******//
in response updated question: fb api asynchronous, , keep executing other code while waits. using code, have done passed in function, , call function you've passed @ end
function getallalbums(userid, accesstoken, funcsuccess) { var aalbums = []; // array var uri = "/" + userid + "/albums?access_token=" + accesstoken; alert("uri: " + uri); fb.api(uri, function (response) { // check valid response if (!response || response.error) { alert("error occured"); return; } (var = 0, l = response.data.length; < l; i++) { alert("album #: " + + "\r\n" + "response.data[i].id: " + response.data[i].id + "\r\n" + "response.data[i].name: " + response.data[i].name + "\r\n" + "response.data[i].count: " + response.data[i].count + "\r\n" + "response.data[i].link: " + response.data[i].link ); aalbums[i] = new album( response.data[i].id, response.data[i].name, response.data[i].count, response.data[i].link ); alert("aalbums[" + + "].id : " + aalbums[i].id); } funcsuccess(aalbums); });
}
Comments
Post a Comment