我的问题
- 启动 1000 多个在线 API,将 API 调用次数限制为 10 次调用/秒。
- 等待所有 API 调用返回结果(或重试),API 发送数据可能需要 5 秒
- 在我的应用程序的其余部分使用组合数据
我在网站上查看许多不同的问题和答案时所做的尝试
使用 promise 等待一个 API 请求
const https = require("https");
function myRequest(param) {
const options = {
host: "api.xxx.io",
port: 443,
path: "/custom/path/"+param,
method: "GET"
}
return new Promise(function(resolve, reject) {
https.request(options, function(result) {
let str = "";
result.on('data', function(chunk) {str += chunk;});
result.on('end', function() {resolve(JSON.parse(str));});
result.on('error', function(err) {console.log("Error: ", err);});
}).end();
});
};
使用 Promise.all 处理所有请求并等待它们完成
const params = [{item: "param0"}, ... , {item: "param1000+"}]; // imagine 1000+ items
const promises = [];
base.map(function(params){
promises.push(myRequest(params.item));
});
result = Promise.all(promises).then(function(data) {
// doing some funky stuff with dat
});
到目前为止一切顺利,有点
当我将 API 请求的数量限制为最多 10 个时,它会起作用,因为速率限制器会启动。当我console.log(promises)时,它会返回一个“请求”数组。
我曾尝试在不同的地方添加 setTimeout,例如:
...
base.map(function(params){
promises.push(setTimeout(function() {
myRequest(params.item);
}, 100));
});
...
但这似乎不起作用。当我console.log(promises)时,它会返回一个“函数”数组
我的问题
- 现在我被困住了......有什么想法吗?
- 当 API 出现错误时,我如何构建重试
感谢您阅读并听到,您已经是我书中的英雄!