我已经在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
});
这让我觉得我需要建立一系列的承诺。这看起来像这样吗?
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:未处理的承诺拒绝(拒绝ID:14):
对我来说,看起来我正在处理拒绝,可能是什么导致这种情况?
答案 0 :(得分:1)
这一切看起来都很接近。 Promise.all()
应该能够处理剩下的事情。
一旦将一系列承诺推送到promises
,您就可以:
Promise.all(promises)
.then(result => {
//result will be an array of values returned from your requests
}
.catch(err => {
// whoops.
}
唯一的问题是,如果你的一个请求拒绝,它会立即停止一切并拒绝整个事情。也许那就是你想要的,但如果没有,你可能更愿意解决某种错误,然后最终会出现在结果数组中