node.js - NodeJS:一旦执行多个请求,如何使用 Promise.all 来执行一个方法?
问题描述
我有一个NodeJS
项目,其中有 N 个参数数组,我需要调用一个端点 N 次(每个参数一次)。然后我需要在返回所有响应后进行监听,并且只有在检索到所有结果后才执行某个函数。
我知道如何在前端框架中实现上述内容,我在其中使用 axios,然后将来自 axios 的响应存储在一个数组中(例如responsePromises
),然后我正在执行
return Promise.all(responsePromises).then(responses => { {
//do something with the responses[0], responses[1], etc...
}
所以上面是我已经成功使用的东西。问题是,现在我需要在我的后端做同样的事情(我提到的是一个NodeJS
项目)。
下面给出了我用于从单个端点检索数据的代码,如果成功,我正在执行successMethod
.
let paramArray = ["one", "two", "three"];
let parsedURL = url.parse("https://this-is-my-url.com?param=" + paramArray[0]);
let proto = reqUrl.indexOf('https://') === 0 ? https : http;
let request = proto.get({
hostname: parsedURL.hostname,
port: parsedURL.port,
path: parsedURL.path
}, (response) => {
//do something on success
successMethod();
})
request.on('error', (e) => {
//do something on error
errorMethod();
});
request.end();
我不确定的是,如何在我正在使用Promise.all
的代码内部应用实现?NodeJS
如果我能以某种方式paramArray
再次循环遍历数组,将承诺存储到另一个responsePromises
数组中并仅在我返回所有响应时执行我的 successMethod,那将是理想的。
解决方案
你可以await Promise all,确保所有的 Promise 都返回了。
proto.get({
hostname: parsedURL.hostname,
port: parsedURL.port,
path: parsedURL.path
}, async(response) => {
//make responsePromises array
const res = await Promise.all(responsePromises);
//do something on success
successMethod();
})
评论后编辑:
const responsePromises = paramArray.map(i=>{
let parsedURL = url.parse("https://this-is-my-url.com?param=" + i);
let proto = reqUrl.indexOf('https://') === 0 ? https : http;
const request = proto.get({
hostname: parsedURL.hostname,
port: parsedURL.port,
path: parsedURL.path
});
request.on('error', (e) => {
//do something on error
errorMethod();
});
return request;
})
Promise.all(responsePromises).then(responses => {
successMethod();
})
推荐阅读
- c# - 启动时正在加载两种不同的表单
- javascript - 在浏览器中重新显示后如何“清理”聚合物组件中的数据
- python - 无法导入 cx_Oracle,已安装所有依赖项
- r - 使用 ColorRamp 向 Plotly 条形图添加自定义颜色
- c# - 使用带有 full_access_as_user 的 Oauth 对 EWS 进行身份验证
- asp.net-core - Url.Page 返回当前 URL 而不是提及
- c++ - 我无法让枚举类运算符工作
- listview - 过滤的 ViewList 上的 OutBounds 异常
- javascript - 使用带有 ajax 的 SVG 来动画化 IO 硬件的状态
- c - BSP 在嵌入式 Linux 中是什么样子的?