如何从递归异步回调中返回一个值?

时间:2015-06-28 19:13:09

标签: javascript facebook asynchronous recursion

我正在使用facebook js sdk,我正在尝试获取所有组的列表,响应被分页。所以递归似乎是这个

的明显解决方案
function handlePaging(response) {
  if (response && !response.error) {
    if (response.paging.next) {
      return response.data.concat(FB.api(response.paging.next, handlePaging));
    } else {
      return response.data;
    }
  }
}

console.log(FB.api("/me/groups", handlePaging));

但是因为它的异步我得到了未定义的返回。我已经看过异步请求的其他返回值,但是没有一个是递归的,答案是使用回调,我有。

我甚至不确定这是否可能。

1 个答案:

答案 0 :(得分:1)

对FB.api的调用是异步的,因此它通常在调用服务器之前立即返回并调用handlePaging回调。试试这样的事情

    var data = [];

    function handlePaging(response) {

      if (response && !response.error) {

        data = data.concat(response.data);

        if (response.paging.next) {
          FB.api(response.paging.next, handlePaging);
        } else {
          console.log(data);
        }

      }

    }

    FB.api("/me/groups", handlePaging);