Node.JS发出多个POST请求,直到响应为空

时间:2018-06-19 19:15:38

标签: node.js asynchronous post

我正在向API发送POST请求,该请求的字符数有限。为了获得完整的响应,我需要发出多个POST请求,然后将它们全部附加到一个文件中。我对异步编程不太熟悉,所以我想不出解决问题的方法。这是我的代码段:

var request = require('request');
var fs = require('fs');

var options = {//options for POST request body};

request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
       fs.appendFileSync("./response.json", JSON.stringify(body), 'utf8');
       var resp = JSON.parse(fs.readFileSync('./response.json', 'utf8'));
       options.offset = resp.parameters.length; //this is length of my data so far, next request will have this number in it and response will be new data offseted by this number
    }
});

在此请求之后,我需要再做一个,直到body.length为零。所以我想我需要从自己的回调中调用请求函数。我该如何实现?谢谢!

1 个答案:

答案 0 :(得分:1)

就像JM-AGMS所说,将请求函数调用包装在另一个函数中,以使一个请求的回调触发下一个请求。

递归解决方案如下所示:

var request = require('request');
var fs = require('fs');

var options = {/*options for POST request body*/};

function loop(options) {
  request(options, function (error, response, body) {
    if (!error && response.statusCode == 200) {
      if (body.length !== 0) {
        fs.appendFileSync("./response.json", JSON.stringify(body), 'utf8');
        var resp = JSON.parse(fs.readFileSync('./response.json', 'utf8'));
        loop({ ...options, offset: resp.parameters.length });
      }
    }
  });
}