我有一个简单的查询如下:
var getGreaterQuestion = function (gid) {
var query = new Parse.Query(Parse.Object.extend("Question"));
query.equalTo("groupId", gid);
return query.first();
}
我正在准备一个由这个函数组成的数组:
var groupIds = _.range(1, 17);
var groupIdAndRandomNumberPack = _.map(groupIds, function (gid) {
return {groupId: gid, random: Math.random()};
});
var pack = _.map(groupIdAndRandomNumberPack, function (queryItem) {
return getGreaterQuestion(queryItem.groupId, queryItem.random);
});
在pack
数组中,Question
类有16个不同的“第一个”查询。
我正在使用以下代码段运行此查询:
return Parse.Promise.when(pack).then(function () {
console.log("arguments : " + JSON.stringify(arguments));
...
...
);
参数是我的查询从MongoDB检索数据的结果。
如果我在解析后端运行此查询,则参数json格式如下所示:
{
"0":{QuestionObject},
"1":{QuestionObject},
...
"16":{QuestionObject}
}
如果我在MongoLAB上定义MongoDB的本地解析实例上运行此查询,则会得到以下结果:
{
"0":[
{QuestionObject},
{QuestionObject},
....
{QuestionObject}
]
}
这种差异的原因是什么?我需要在MongoDB或解析快递应用程序上应用任何配置,以获得与解析后端相同的结果。
答案 0 :(得分:2)
这是Parse.Promise.when
功能的问题。它的实现似乎随this提交而改变。
当时when
函数将所有结果应用于您的回调函数,无论您如何向when
提供输入。这些调用产生相同的输出:
Parse.Promise.when([promise0, promise1, ...]).then(resultFunc)
Parse.Promise.when(promise0, promise1, ...).then(resultFunc)
var resultFunc = function() {
console.log("arguments : " + JSON.stringify(arguments));
//prints out like {"0": promiseResult0, "1", promiseResult1, ...}
}
现在,此行为已更改。如果您将输入promises作为数组提供,它将作为一个数组返回,如果您这样做,它将作为参数应用。请参阅this line in commit。