Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js NodeJS~我将我的函数从sync改为async,现在我的代码赢了';行不通_Node.js_Facebook_Api_Asynchronous_Recursion - Fatal编程技术网

Node.js NodeJS~我将我的函数从sync改为async,现在我的代码赢了';行不通

Node.js NodeJS~我将我的函数从sync改为async,现在我的代码赢了';行不通,node.js,facebook,api,asynchronous,recursion,Node.js,Facebook,Api,Asynchronous,Recursion,我正在尝试使用Facebook图形API递归地获取我在Facebook上的所有帖子 对Facebook API的简单GET请求不会返回我所有的帖子。相反,它返回一个分页响应 {"data": [ {Facebook post}, {Facebook post}, {Facebook post}. etc ], "paging": { "next":Url (api endpoint) to next page of resu

我正在尝试使用Facebook图形API递归地获取我在Facebook上的所有帖子

对Facebook API的简单GET请求不会返回我所有的帖子。相反,它返回一个分页响应

{"data": [
     {Facebook post},
     {Facebook post},
     {Facebook post}.
     etc
    ],
  "paging": {
          "next":Url (api endpoint) to next page of results
   }
}
因此,我必须递归地对paging.next发出GET请求,以检索我所有的帖子

使用同步的HTTP请求执行此操作很容易。但是我使用的是NodeJS,我一直听说我应该保持异步。因此,我将HTTP GET请求方法更改为异步

为了在异步HTTP get请求上获得一些控制流,我使用了asyncnpm模块;特别是,异步瀑布

下面是我使用async.瀑布的递归函数:

function getAllPosts(responseObj, masterPosts) {


    masterPosts = typeof masterPosts !== 'undefined' ? masterPosts : {'data':[]};
    var posts = responseObj['data'];
    masterPosts['data'] = masterPosts['data'].concat(posts);
    if (responseObj.hasOwnProperty('paging') && responseObj['paging'].hasOwnProperty('next')) {
    var r;

    async.waterfall([
        function(callback){
            r = httpGet(responseObj['paging']['next']);
            callback(null, r);
        },
        function(arg1, callback){
            getAllPosts(JSON.parse(arg1), masterPosts);
            callback(null, 'done');
        },
    ], function (err, result) {
        //result now == 'done'
    });
    }
    return masterPosts;
}
httpGet函数是异步的。我试过了,但没用:(我的结果仍然只有我Facebook帖子的一半

函数参数responseObj是一个JavaScript对象,刚刚解析了分页JSON响应


我在这里缺少什么?

这里有同步部分,因为您需要等待一个请求完成,以便获取下一个URL并执行下一个请求。异步部分正在发出请求并等待响应。对于处理异步内容,我建议使用承诺。如果可能,您能给我一个具体的示例吗?