3
由于此应用程序的复杂性,我需要包装Facebook API调用,就像这样。从匿名函数范围提取数据
//In main file, read is always undefined
var read = fb_connect.readStream();
// In fb_wrapper.js
function readStream() {
var stream;
FB.api('/me/feed', {limit:10000}, function (response) {
stream = response.data;
});
return stream;
}
我知道,由于呼叫的异步性质,readStream()
功能的其余部分将返回stream
(没有值)。我很难找到一种将数据从回调函数范围中取出并返回到更高范围的方法。 FB API调用返回正常(我调试了它一百次),但获取响应数据一直是迄今为止的战斗。
如果有人有任何建议,将不胜感激。我搜索了一下Facebook的jQuery插件(可能是预制的包装),但运气不错。
感谢您的答复。真的,我正在寻找这些API调用的包装,所以我可以有更多的面向对象的应用程序。建模如下:'app.FBAPICall()',然后能够从这个调用中返回值。但是,我发现异步处理程序由JS线程中的最顶层对象调用,而不是由我的应用程序对象调用。 – Mark 2011-03-13 17:45:08
你说得对。异步调用需要“继续”编码风格,与正常的过程风格完全不同。在“继续”的风格中,你从内到外编码。将异步JavaScript调用转换为同步调用并不总是很容易(或可能),因为JavaScript是单线程的 - 正如您所提到的那样,回调由JS线程调用,您不应该阻止。 – 2011-03-14 03:32:08