这听起来像一个奇怪的标题,可能没有说得太好.但这是问题所在.
我已经调用了这个方法:
function BindFacebookAlbumAndPhotoData()
{
GetAllFacebookAlbums(userID, accessToken, function(aAlbums)
{
if (aAlbums === null || aAlbums === undefined)
{
// TODO: Need to handle this
return;
}
var defaultAlbumID = aAlbums[0].id;
BindFacebookAlbumDropdownList(aAlbums, defaultAlbumID);
BindFacebookThumbnails(userID, accessToken, defaultAlbumID, photosContainerDivID);
SetSelectDefaultOption(defaultAlbumID);
});
}
Run Code Online (Sandbox Code Playgroud)
所以这是GetAllFacebookAlbums方法:
function GetAllFacebookAlbums(userID, accessToken, callbackFunction)
{
var aAlbums = [];
var uri = "/" + userID + "/albums?access_token=" + accessToken;
// this is an async call so code after this will fire at the same time
FB.api(uri, function(response)
{
// check for a valid response
if (!response || response.error)
{
callbackFunction(albums);
}
for (var i = 0, l = response.data.length; i < l; i++)
{
//do whatever
}
});
// wait for the FB.api call to run a bit before calling code below
window.setTimeout(callbackFunction(aAlbums), 5000);
}
Run Code Online (Sandbox Code Playgroud)
发生了什么事情是这条线在setTimeout之前被调用:
var defaultAlbumID = aAlbums[0].id;
Run Code Online (Sandbox Code Playgroud)
我把那个超时放在那里的全部原因是我可以等待FB.api调用完成.然后在我知道有数据后调用回调.那么当我在调用回调之前肯定没有看到5秒的延迟时,我的回调中的那些线是如何调用的?
这一行就在这里:
window.setTimeout(callbackFunction(aAlbums), 5000);
Run Code Online (Sandbox Code Playgroud)
你正在通话中调用该功能setTimeout().用另一个函数包装它:
window.setTimeout(function() { callbackFunction(aAlbums); }, 5000);
Run Code Online (Sandbox Code Playgroud)
现在,也就是说,整个设置并没有多大意义.您已经将代码放在一个您知道将在数据准备就绪后立即调用的位置.这是您获得的Facebook API回调中的代码.为什么不从那里调用你的"callbackFunction"呢?
| 归档时间: |
|
| 查看次数: |
341 次 |
| 最近记录: |