通过进行此API调用,我将收到一个类似于以下内容的JSON文件:
{
"objects": [
{
"a": 123456789,
"b": 1
},
{
"a": 272727272,
"b": 1
}
]
}
(这只是一个例子,我想尽可能简化它,但通常有20或30个对象)
我想对http://example.com/objects[0].a进行API调用,对http://example.com/objects[1].a进行API调用,然后将它们一起添加到“ responseA”中。
是否存在比循环处理多个对象更好的解决方案(因为这会花费很多时间,并且很容易在一秒钟内达到我的通话限制)。
有更好的解决方案吗?
Edit1:删除了无用的标签
答案 0 :(得分:0)
一种方法是使用软件包axios
。在这种情况下使用非常方便。
发出多个请求的示例:
const objectZeroURL = 'http://example.com/objects[0].a';
const objectOneURL = 'http://example.com/objects[1].a';
function getObjectZero() {
return axios.get(objectZeroURL);
}
function getObjectOne() {
return axios.get(objectOneURL);
}
app.get('/', (req, res) => {
axios.all([getObjectZero(), getObjectOne()])
.then(axios.spread((dataFromZero, dataFromOne) => {
name = [];
// Segregating data from the response object
users.data.forEach((user) => {
name.push(user.name);
});
// Segregating data from the response object
posts.data.forEach((post) => {
...
});
// Writing back response to display
for(var i = 0; i < name.length; i++) {
res.write('=> ' + name[i]);
}
res.end();
})).catch((error) => {
res.status(500).render('error');
});
});
我希望这能符合您所寻找的答案。
答案 1 :(得分:0)
看起来您需要将对象数组映射到Promises,这样每秒仅发送少量请求。这是一个代码示例,该示例使用delay
帮助函数每秒仅发送3个请求,并使用Promise.all
指示何时完成所有请求:
const objs={"objects":[{"a":123456789,"b":1},{"a":272727272,"b":1},{"a":123456789,"b":1},{"a":272727272,"b":1},{"a":123456789,"b":1},{"a":272727272,"b":1},{"a":123456789,"b":1},{"a":272727272,"b":1}]};
function makeRequest(a) {
console.log('Making a request ' + a);
return new Promise((res) => setTimeout(res, 200, 'response str'));
}
const delay = ms => new Promise(res => setTimeout(res, ms));
const requests = objs.objects.map((object, i) => (
delay(1000 * Math.floor(i / 3))
.then(() => makeRequest(object.a))
));
Promise.all(requests)
.then((responses) => {
console.log('done');
console.log(responses);
});