Извлечение данных из области анонимных функций - PullRequest
3 голосов
/ 11 марта 2011

Из-за сложности этого приложения мне нужно обернуть вызовы API Facebook, например, так.

//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 (что не имеет значения). У меня возникают проблемы с поиском способа вывести данные из области функции обратного вызова и выполнить резервное копирование в более высокую область. Вызов API FB возвращается нормально (я отлаживал его сто раз), но получение этих данных ответа было битвой до сих пор.

Если у кого-то есть какие-либо предложения, это будет высоко ценится. Я искал плагины jQuery для Facebook (возможно, в качестве готовой обертки) без особой удачи.

1 Ответ

2 голосов
/ 11 марта 2011

Судя по вашему вопросу, похоже, вы ищете синхронный звонок. Это означает, что вы захотите использовать данные, возвращаемые из вызова API сразу после его вызова. В этом случае вам нужно проверить, поддерживает ли FB.api синхронные вызовы (в основном, нет).

В противном случае вам нужно понимать, что вы делаете асинхронный звонок здесь. Это означает, что вы должны поместить свой код обработки ВНУТРИ функции обратного вызова, которую вы передаете в 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);
...