2016-03-09 6 views
9

を返し解析クラウドコードは、「最初の」クエリー配列は、以下のように、私は単純なクエリを有する異なる結果を

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形式は以下の通りです:私はMongoLABに定義されたMongoDBを持つ私の地元の解析インスタンス上でこのクエリを実行する場合

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

、それは次のような結果が得られます。

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

この違いの理由は何ですか?解析バックエンドと同じ結果を得るために、MongoDBやparse expressアプリケーションに適用する必要がある設定はありますか?

答えて

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

この動作が変更されました。入力の約束を配列として与えると、それは1つの配列として返されます。そうした場合は引数として適用されます。 this line in commitを参照してください。

+1

「適応性のあるwhen()」は、壮大で紛らわしいところのどこかにあります。いくつかは慣れていくだろう。 –

関連する問題