【发布时间】:2019-02-15 11:52:50
【问题描述】:
我希望 for 循环按顺序运行,在移动到下一个循环之前完全完成一个循环。该循环将一条 JSON 消息放入另一个 JSON 消息中,然后将其发送到一个开始发布到 api 的函数。在转到 JSON 中的下一项之前,我需要完成该功能。 p 是用于回发的项目名称,是否通过 api 服务成功发布到数据库。
这里是这个问题的简化代码。
let processJson = function(items) {
for (const p in items) {
let newObj = {
"key1": items[p].key1,
"key2": items[p].key2,
"keySpecial": items[p].key3 + items[p].key4
};
await validateJson(p, newObj);
}
};
我需要 validateJson 完成它的异步工作链,然后再继续循环中的下一个 p。
我该怎么做?
这里是请求的 validateJson 函数。
const validateJson = function (id, jsonObj) {
const processItemSchema = {
"properties": {
"key1": {
"type": "string"
},
"key2": {
"type": "string",
"minLength": 3,
"maxLength": 3
},
"keySpecial": {
"type": "string",
"minLength": 4,
"maxLength": 4
}
}
};
const ajv = new Ajv();
let validate = ajv.compile(processItemSchema);
let valid = validate(jsonObj);
if (!valid){
resCallback(id + ": invalid JSON");
}
else{
// Generate Special Flag(s) value, Comma Separated Value
let specialFlag = "";
specialFlag += specialCheck1(jsonObj.keySpecial);
if(specialFlag.length > 0) {
let temp = specialCheck2(jsonObj.keySpecial);
if (temp.length > 0) {
specialCheck += "," + temp;
maintenanceCall(id, jsonObj, specialFlag);
}
else {
mainenanceCall(id, jsonObj, specialFlag);
}
}
else {
specialFlag += specialCheck1(jsonObj.keySpecial);
maintenanceCall(id, jsonObj, specialFlag);
}
}
};
根据要求提供更多代码
const maintenanceCall= function (id, jsonObj, specialFlag) {
request.post({
url: 'https://url.poster/something',
auth: {
'user': 'user',
'pass': 'pass',
'sendImmediately': true
},
json: true,
body: {
"Input": {
"InputParameters": {
"KEY": jsonObj.key1,
"Hole": jsonObj.Key2,
"SomeWhere": jsonObj.keySpecial
}
}
}
}
, function (error, response, body) {
if (body.OutputParameters.X_MSG_DATA !== null) {
resCallback(id + , Message: "
+ body.OutputParameters.DATA);
}
else {
const sampCheck = function(smsFlag){
if(flag=== "Y")
return ".X";
else if(flag=== "N")
return "";
else
resCallback(id + ": this item can not be processed");
processItem(id, jsonObj, stats);
}
}
});
};
【问题讨论】:
-
可以发
validateJson的代码吗?它需要改变。 -
请贴出实际代码,以便确定解决方案。
-
我没有看到任何异步操作,它们必须在
resCallback或maintenanceCall中? -
resCallback()是做什么的?是同步的还是异步的? -
另外,
processItem()是做什么的,是同步的还是异步的?
标签: json node.js asynchronous request async-await