解析云代码"第一"查询数组返回不同的结果

Fua*_*kun 9 mongodb node.js promise express parse-platform

我有一个简单的查询如下:

var getGreaterQuestion = function (gid) {
    var query = new Parse.Query(Parse.Object.extend("Question"));
    query.equalTo("groupId", gid);
    return query.first();
}
Run Code Online (Sandbox Code Playgroud)

我正在准备一个由这个函数组成的数组:

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);
});
Run Code Online (Sandbox Code Playgroud)

pack数组中,有16个不同的"第一"查询用于Question类.

我正在使用以下代码片段运行此查询:

return Parse.Promise.when(pack).then(function () {
        console.log("arguments : " + JSON.stringify(arguments));
...
...
);
Run Code Online (Sandbox Code Playgroud)

arguments是我的查询从MongoDB检索数据的结果.

如果我在解析后端运行此查询,则参数json格式如下所示:

{
   "0":{QuestionObject},
   "1":{QuestionObject},
   ...
   "16":{QuestionObject}
}
Run Code Online (Sandbox Code Playgroud)

如果我在MongoLAB上定义MongoDB的本地解析实例上运行此查询,则会得到以下结果:

{
   "0":[
      {QuestionObject},
      {QuestionObject},
      ....
      {QuestionObject}
   ]
}
Run Code Online (Sandbox Code Playgroud)

这种差异的原因是什么?是否有任何配置需要应用于MongoDB或解析快递应用程序以获得与解析后端给出的相同结果.

erk*_*gur 2

这是功能的问题Parse.Promise.when。它的实现似乎随着这次提交而改变。

当时,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, ...}
}
Run Code Online (Sandbox Code Playgroud)

现在,这种行为发生了变化。如果您将输入承诺作为数组提供,它将作为一个数组返回,如果您这样做,它将作为参数应用。请参阅commit 中的这一行