将发布请求的响应存储在json对象中

时间:2018-08-17 00:09:11

标签: json node.js asynchronous request response

我正在使用node.js进行编程。

示例场景。我的函数中有数百个异步运行的发布请求。我想捕获请求是成功还是失败。我想通过将它们放入json对象来捕获它们。

小样本示例。

exports.handler = (event, context, callback) => {

    const request = require('request');

    const items = event;
    function resObj(resArr) {
        return {
            callbackRes: function() {
                callback(null, resArr);
            },
            setRes: function(res) {
                resArr.push(res);
            }
        };
    }
    const doPost = function (id, jsonObj) {
        request.post({
                url: 'https://someapi.com/thisstuff/',
                headers: {
                    'Accept': 'application/json',
                    'Accept-Charset': 'utf-8',
                },
                auth: {
                    'user': 'someuser',
                    'pass': 'somepass',
                    'sendImmediately': true
                },
                json: true,
                body: {
                    "Input": {
                        "record": {
                            "ATTR1": jsonObj.time,
                            "ATTR2": jsonObj.type,
                            "ATTR3": jsonObj.otherkey,
                        }
                    }
                }
            }
            , function (error, response, body) {             
            //capture success or failed
                if (body.Output.STATUS !== 'S') {
                    resObj().setRes(id + " : Failed");
                }
                else{
                    resObj().setRes(id + " : Success");
                }
            });
    };

// processes objects in json
    for (let p in items) {
        if(p.next == null){
            resObj().callbackRes();
        }
        let newObj = {
            "time": items[p].time,
            "timetype": items[p].type,
            "someotherkey": items[p].otherkey,
        };
        doPost(p, newObj);
}


};

我收到一个包含许多对象的json。它们在底部的for循环中进行处理。每个对象都要经过许多请求,在此示例中只有一个。如果下一个对象不存在,则我回调在闭包中找到的结果数组。

使用闭包,我仍然只能得到回复[]。

我知道这是一个范围问题和异步问题。 我想要的响应将是一个包含所有对象ID和状态的数组。所以一个例子是

["id34323 : Success", "id47392 : Success", "id3829 : Failed"] and so on..

最终,我想将结果存储在JSON对象中,这样响应就这样了

{
"id34323" : "Success",
"id47329" : "Success",
"id3829" : "Failed"
}

所以我的主要问题是,在循环中处理完最后一个对象后,如何存储这些响应并将其发送回去。

第二,是否有一种简单的方法可以将数组转换为JSON对象,还是应该在结果字符串后附加一个字符串。谢谢

1 个答案:

答案 0 :(得分:1)

对不起。这是一个双重职位。在发布此问题之前,我搜索了很多类似的问题以找到答案。在继续研究了大约一个小时左右的类似问题之后,我确实找到了答案。

因此,如果您在这里带头找到类似问题的解决方案,那么这是为我解决的帖子。

nodejs multiple http requests in loop