我有一个node.js服务器,它向外部API发出POST请求,每次我必须发出约1万个请求(不用担心我没有滥用API),并且我需要大约2 -3分钟。
我使用request-promise
库是为了与Promise.all()
一起发出请求,以等待所有请求解决。
我的问题是请求似乎卡住了并且不能并行运行,我知道promise会在创建后立即执行,但是resolve
事件似乎一次只能侦听10个事件。
我尝试更新maxListeners
,并且也使用es6-promise-pool
(有500个池),但是没有运气。
我的下一个解决方案可能是将child-process
与fork
一起使用,这种解决方案似乎对我的问题最好吗?
谢谢!
代码:
async function send_msg(msg) {
return new Promise(function (resolve, reject) {
request.post(options, function (err, res, body) {
if (err) {
logger.error('error sending msg ' + err);
resolve(null);
} else {
resolve(body);
}
})
});
}
}
async function send_msgs() {
let msgs = await OutgoingMessage.findAll();
for (let i = 0; i < msgs.length; i++) {
promises.push(send_msg(msgs[i]).then(async (result) => {
if (result != null) {
try {
let sid = result['MessageSid'];
let status = result['Status'];
msgs[i].update({sid: sid, status: status});
} catch (e) {
logger.error(e + JSON.stringify(result));
msgs[i].update({status: 'failed'});
}
}
}));
}
return Promise.all(promises);
}