javascript - 处理来自 node.js 应用程序的多个 https 请求

标签 javascript node.js request

我在 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/

相关文章:

javascript - 如何创建输入下拉列表?

javascript - 内部存储JS文件未与android webview链接

javascript - React Native - LayoutAnimation : how to make it just animate object inside component, 不是整个组件/ View ?

javascript - Node.JS 和 Object.Keys 与 json

javascript - 将 REST API 用于 Discord 机器人

javascript - 同步运行函数

javascript - 有没有办法从 Node.js 中的特定位置向网站发送请求?

javascript - 如何从驻留在不同 Web 应用程序文件夹中的 .jsp 文件访问 .js 文件

javascript - 即使父进程终止,如何保持子进程的生命

ios - 将 NSURLConnection 切换到 NSURLSession 后自定义 NSURLProtocol 变慢