node.js - Node.JS 发出多个 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
为零。所以我想我需要的是从它自己的回调中调用请求函数。我如何实现这一目标?谢谢!
解决方案
就像 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 });
}
}
});
}
推荐阅读
- c# - 如何在有 HttpGetAttribute 的地方添加 HttpHeadAttribute?
- html - 结合 rowspan 和 colspan 的引导程序
- docker - 我怎样才能让我的容器从开始 -> 健康
- java - 如何将 .aar 包的所有内容转换为 .jar 包?
- excel - 从excel工作簿自动创建csv文件
- github - 如何从 master 以外的分支运行 GitHub Action?
- performance - 英特尔 LLC 的一些奇怪行为
- python - 在不使用的情况下构建 django detailview 和 listview
- snowflake-cloud-data-platform - 计算雪花中数据库的数据存储
- javascript - 如何仅在调用 stream.requestFrame() 时记录 HTML 画布并保存结果?