【问题标题】:Parse Cloud code "first" query array returns different resultsParse Cloud 代码“第一个”查询数组返回不同的结果
【发布时间】:2016-06-23 19:53:29
【问题描述】:

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

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 个不同的“第一”查询。

我正在使用以下代码 sn-p 运行此查询:

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

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

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

{
   "0":{QuestionObject},
   "1":{QuestionObject},
   ...
   "16":{QuestionObject}
}

如果我使用在 MongoLAB 上定义的 MongoDB 在本地解析实例上运行此查询,它会给出以下结果:

{
   "0":[
      {QuestionObject},
      {QuestionObject},
      ....
      {QuestionObject}
   ]
}

造成这种差异的原因是什么?是否需要在 MongoDB 上应用任何配置或解析 express 应用程序以获得与解析后端相同的结果。

【问题讨论】:

    标签: node.js mongodb express parse-platform promise


    【解决方案1】:

    这是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, ...}
    }
    

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

    【讨论】:

    • 哎呀,“自适应when()”介于华丽和混乱之间。需要一些时间来适应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多