我有一个nodejs
项目,其中有N个参数的数组,需要调用endpointN次(每个参数调用一次)。然后,我需要在返回所有响应时进行监听,并且只在检索到所有结果时执行某个函数。
我知道如何在前端框架中实现上述内容,在前端框架中,我使用axios,然后将axios的响应存储在数组中(例如responseproposes
),然后执行
return Promise.all(responsePromises).then(responses => { {
//do something with the responses[0], responses[1], etc...
}
所以上面是我已经成功使用的东西。问题是,现在我需要在我的后端(我提到的是一个NodeJS
项目)中执行同样的操作。
下面给出了用于从单个endpoint检索数据的代码,如果成功,我将执行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();
我不确定的是,如何在我正在使用的NodeJS
代码中应用promise.all
实现?如果我能以某种方式再次循环paramarray
数组,将承诺存储到另一个responsepropors
数组中,并仅在返回所有响应时执行successMethod将是理想的。
你可以等待所有的承诺,这确保所有的承诺都得到了回报。
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();
})