我正在使用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对象,还是应该在结果字符串后附加一个字符串。谢谢
答案 0 :(得分:1)
对不起。这是一个双重职位。在发布此问题之前,我搜索了很多类似的问题以找到答案。在继续研究了大约一个小时左右的类似问题之后,我确实找到了答案。
因此,如果您在这里带头找到类似问题的解决方案,那么这是为我解决的帖子。