我希望能够访问JSONOBJECT中的JSONARRAY。但是在Bluebird Promises之后,我不能在" arrayOfResults"的Entrys上使用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;
});
};
&#13;
答案 0 :(得分:0)
arrayOfResults包含promise结果,而不是值,所以你不能应用像JSON.parse这样的同步方法
尝试此功能
function somefunction(ArrayOfIDS) {
return Promise.map(ArrayOfIDS, function(ID, index){
return Promise.resolve()
.then(function(){
return db.getAsync(ID);
})
.then(function(JSONOBJECT) {
return {
obj: JSON.parse(JSONOBJECT),
index: index
}
})
})
.then(function(ARRAYOFJSONOBJECTS){
return SOMETHING;
});
}