数组上的Bluebird Promises和JSON.parse

时间:2016-11-19 12:37:32

标签: javascript json node.js promise bluebird

我希望能够访问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;
&#13;
&#13;

1 个答案:

答案 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;
    });
}