我在 SO 上四处寻找这方面的帮助,我一直在兜圈子,但我被困住了
我正在使用 node.js https 制作多个 ReST POSTS,我需要能够跟踪每个请求的响应,然后汇总结果。我每次执行的请求数各不相同。
我创建了一个函数,它为每个 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 ,但如果我这样做,我不知道如何处理多次返回
httpRequest(options, JSON.stringify(bulkUpdateObj)).then(function(output) {
console.log(output);
// Do stuff
});
这让我觉得我需要建立一系列 promise 。会像这样吗?
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);
});
但我不断收到消息: ( Node :61289)UnhandledPromiseRejectionWarning:未处理的 promise 拒绝(拒绝 ID:14):
对我来说,我似乎正在处理拒绝,这可能是什么原因造成的?
最佳答案
这一切看起来都很接近。 Promise.all()
应该能够处理剩下的事情。
一旦将一系列 promise 推送到 promises
中,您就可以:
Promise.all(promises)
.then(result => {
//result will be an array of values returned from your requests
}
.catch(err => {
// whoops.
}
唯一的问题是,如果您的其中一个请求被拒绝,它会立即停止一切并拒绝整个请求。也许这就是您想要的,但如果不是,您可能更愿意解决某种错误,这些错误将最终出现在结果数组中
关于javascript - 处理来自 node.js 应用程序的多个 https 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46083643/