【发布时间】:2017-04-03 05:49:20
【问题描述】:
我想访问 JSONOBJECT 中的 JSONARRAY。但是在 Bluebird Promises 之后,我无法在“arrayOfResults”的条目上进行 JSON.parse。如果我这样做,代码就会陷入僵局。数据库是redis。请帮忙:)
更新:该部分之后的代码导致死锁,对不起:(
var JSONOBJECT = {
"A":DATA,
JSONARRAY :[{A:x}, {B:C}]
};
db.set(SOMEID, JSON.stringify(JSONOBJECT));
function somefunction(ArrayOfIDS){
var promises = [];
for (var i = 0; i < ArrayOfIDS.length; i++) {
promises.push(db.getAsync(ArrayOfIDS[i]));
}
return Promise.all(promises).then(function(arrayOfResults) {
for (i = 0; i < arrayOfResults.length; i++) {
//THIS IS NOT WORKING, but i need to parse it back to JsonObject
//var JSONOBJECT = JSON.parse(arrayOfResults[i]);
//The JSONOBJECT below only contains the string of the JSONOBJECT
var JSONOBJECT = arrayOfResults[i];
//So this line below is not working
var JSONARRAY = JSONOBJECT.JSONARRAY;
}
//SOME MORE CODE
return SOMETHING;
});
};
【问题讨论】:
-
你能告诉我们,arrayOfResults 包含什么吗?
-
它包含了JSON.stringify(JSONOBJECT)的值,所以arrayOFResults的每个Entry中只有一个JSONOBJECT的字符串:(
-
@Arzan0 我很确定你没有死锁,因为这里的依赖图中没有循环。很可能结果不是正确的 json 字符串,因此 JSON.parse 失败并且 promise 被拒绝。尝试处理承诺拒绝,至少将它们记录到控制台。
-
“这不工作”到底指的是什么?如果您只是解析 JSON 字符串,您会得到什么错误?有什么问题?
标签: javascript json node.js promise bluebird