【发布时间】:2021-01-13 11:47:58
【问题描述】:
我有一个对象数据数组,例如 [{number:1}、{number:2}、{number:3}...{number:100}]。并希望以 10 个连续批次进行并行 API 调用,直到处理完整个数组。
我该怎么做?
这是我的代码。它超过了前 10 个,但随后就停止了。
const async = require("async");
const axios = require("axios");
const calls = require("../model/data"); // [{number:1}, {number:2},{number:3},...{number:100}]
let makeAPICall = function (request, callback) {
axios
.post("http://www.api.com/", {
number: `${request.number}`,
webhookURL: "http://localhost:8000/",
})
.then(function (response) {})
.catch(function (err) {
callback(err);
});
};
const functionArray = calls.map((request) => {
return (callback) => makeAPICall(request, callback);
});
exports.startCalls = (req, res, next) => {
async.parallelLimit(functionArray, 10, (err, results) => {
if (err) {
console.error("Error: ", err);
} else {
console.log("Results: ", results.length, results);
}
});
};
【问题讨论】:
-
对于初学者,您的
makeAPICall()函数在axios调用成功时不会调用回调。 -
谢谢!我修好了。
-
你是说现在剩下的都可以工作了吗?
-
它几乎处理了整个事情(除了一个),但不是很有序。最新的批次首先完成。此外,API 向服务器发出的 post 请求是无序的。
-
并行运行请求意味着它们可以以未知的顺序完成。管理并行请求的一个很好的功能将按照您最初指定请求的顺序收集结果,但是当每个单独的完成时是盲目的运气(您正在并行运行异步操作,因此它们在完成时完成)。如果您绝对希望它们按顺序运行和完成,那么您必须一个接一个地对它们进行排序,而不是并行运行它们。
标签: node.js api express asynchronous async.js