从匿名函数范围中提取数据

时间:2011-03-11 05:43:10

标签: javascript facebook asynchronous scope anonymous-function

由于此应用程序的复杂性,我需要包装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插件(可能是一个预制的包装器),运气不佳。

1 个答案:

答案 0 :(得分:2)

从您的问题判断,您似乎正在寻找同步通话。这意味着您需要在调用之后立即使用从api调用返回的数据。在这种情况下,您需要检查FB.api是否支持同步调用(大多数情况下不支持)。

否则,您需要了解您正在此处进行异步调用。这意味着您应该将处理代码INSIDE放在传递给FB.api的回调函数中。这称为编写代码的“延续”样式,是使用异步调用的标准方法。

FB.api('/me/feed', {limit:10000}, function (response) {
    var stream = response.data;
    // Do your processing here, not outside!!!
});

或者:

function handlerFunction(response) {
   // Do your processing here
}

FB.api('/me/feed', {limit:10000}, handlerFunction);