Nodejs 如何并发请求数据接口,并返回汇总后的结果?
Nodejs 如何并发请求数据接口,并返回汇总后的结果?
我用 Nodejs 写了一个 API 接口,用于请求指定数据。这个接口会请求三个其他的 API:
我的目的是同时(并发)请求上面这三个 API,然后汇总请求到的结果,返回给客户端。
请问这个可以实现吗,对 Nodejs 不懂?
await Promise.all([
fetch(“url1”),
fetch(“url2”),
fetch(“url3”),
])
如果用包装好的包如 axios,可以用 axios.all([request1, request2, request3,…).then(axios.spread(response1, response2, response3) => {})。
promise.all
不是 Nodejs 不懂的问题,你应该多去学下 js,特别是 es6+的😄
1.回调嵌套
2.请求成功计数
3.promise.all
async ()=>{
const task1 = fetch1()
const task2 = fetch2()
const task3 = fetch3()
// try catch
const task1Resp = await task1
const task2Resp = await task2
const task3Resp = await task3
// logic
}
promise.all 建议里边包一层 promise,这样即使请求错误 promise.all 也不会挂掉往下走了
promise.allSettled 可解
用这个就好了,总有你想要的流程控制方式
https://caolan.github.io/async/v3/docs.html#parallel
async.parallel([
function(callback) {
setTimeout(function() {
callback(null, ‘one’);
}, 200);
},
function(callback) {
setTimeout(function() {
callback(null, ‘two’);
}, 100);
}
],
// optional callback
function(err, results) {
// the results array will equal [‘one’,‘two’] even though
// the second function had a shorter timeout.
});
// an example using an object instead of an array
async.parallel({
one: function(callback) {
setTimeout(function() {
callback(null, 1);
}, 200);
},
two: function(callback) {
setTimeout(function() {
callback(null, 2);
}, 100);
}
}, function(err, results) {
// results is now equals to: {one: 1, two: 2} 这里执行所有请求返回后的回调
});
在Node.js中,你可以使用Promise.all来并发请求多个数据接口,并在所有请求完成后汇总结果。以下是一个示例代码,展示了如何实现这一点:
const axios = require('axios');
// 假设你有多个API接口地址
const urls = [
'https://api.example1.com/data',
'https://api.example2.com/data',
'https://api.example3.com/data'
];
// 并发请求数据接口
const fetchData = async (urls) => {
try {
const responses = await Promise.all(urls.map(url => axios.get(url)));
const results = responses.map(response => response.data);
// 汇总结果,这里简单地将结果合并为一个数组
const汇总结果 = results.flat();
return 汇总结果;
} catch (error) {
console.error('请求数据接口时发生错误:', error);
throw error;
}
};
// 调用函数并处理结果
fetchData(urls)
.then(汇总结果 => {
console.log('汇总后的结果:', 汇总结果);
})
.catch(error => {
console.error('处理过程中发生错误:', error);
});
在这个示例中,我们使用了axios库来发送HTTP请求。Promise.all接受一个包含多个Promise的数组,并返回一个新的Promise,该Promise在所有传入的Promise都成功完成时才会解析。我们使用map函数将每个URL转换为一个axios.get请求,然后使用Promise.all来并发执行这些请求。最后,我们汇总所有响应的数据并返回。
请确保你已经安装了axios库,可以通过运行npm install axios来安装。


