处理来自node.js应用程序的多个https请求
我一直在寻找这样的帮助,而且我一直在圈子里走了一段时间,但我卡住了
我使用node.js https进行多个ReST POSTS,我需要能够跟踪每个请求的响应,然后汇总结果。 我每次执行的请求数量都不相同。
我创build了一个函数,为每个http请求返回一个Promise。
function httpRequest(params, postData) { return new Promise(function(resolve, reject) { var reqActivity = http.request(options, function(res) { if (res.statusCode < 200 || res.statusCode >= 300) { return reject(new Error('statusCode=' + res.statusCode + ' statusMessage=' + res.statusMessage)); } var chunks = []; res.on("data", function(chunk) { console.log("Blowing chunks..."); chunks.push(chunk); }); res.on("end", function() { console.log('At the end'); var body = Buffer.concat(chunks); var response = JSON.parse(body); var errorMessage; if (//checking for some specific messages in the response) { errorMessage = "stuff that went wrong"; reject(errorMessage); } resolve(body); }); res.on("error", function(error) { console.log("in error"); reject(error); }); reqActivity.write(postData); reqActivity.end(); }); }); };
然后我需要多次调用这个函数,并处理返回的promise,但是如果我这样做,我不明白我可以如何处理多个return
httpRequest(options, JSON.stringify(bulkUpdateObj)).then(function(output) { console.log(output); // Do stuff });
这让我觉得我需要build立一系列的承诺。 会是这样吗?
var promises = []; promises.push(httpRequest(options, JSON.stringify(bulkUpdateObj)));
如果是这样,我该如何使用Promise.all来检查东西? 或者这的确是正确的方法呢?
任何帮助,非常感谢,一如既往!
更新所以我已经实现Promise.all中的Promise数组如下所示:
Promise .all(promises) .then(values => { console.log("Inside of Promise.all - promise length: " + promises.length); console.log("Values: " + values); }) .catch(reason => { console.log("Inside of error of Promise.all - promise length: " + promises.length); console.log("Reason: " + reason); });
但我不断得到的消息:(节点:61289)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:14):
对我来说,看起来我正在处理拒绝,这可能是什么原因造成的?
这一切看起来很接近。 Promise.all()
应该能够处理其余的。
一旦将一系列承诺推入promises
您可以:
Promise.all(promises) .then(result => { //result will be an array of values returned from your requests } .catch(err => { // whoops. }
唯一的问题是,如果你的一个请求拒绝,它会立即停止一切,拒绝整个事情。 也许这就是你想要的,但是如果不是的话,你可能更喜欢解决某种错误,然后最终在结果数组中出现