2016-03-09 11 views
9

ich eine einfache Abfrage, wie folgt:Parse Cloud-Code "erste" Abfrage Array liefert unterschiedliche Ergebnisse

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

ich ein Array vorbereite dieser Funktion aus:

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

In pack Array, Es gibt 16 verschiedene "erste" Abfragen für Question Klasse.

Ich bin mit dieser Abfrage folgend Code-Schnipsel mit:

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

Argumente das Ergebnis meiner Abfrage von Daten von MongoDB abgerufen werden.

Wenn ich diese Abfrage auf Parse-Backend laufen, Argumente json-Format ist wie folgt:

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

Wenn ich diese Abfrage auf meinem lokalen Parsing-Instanz mit MongoDB auf MongoLAB definiert laufen, es folgendes Ergebnis ergibt:

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

Was ist der Grund für diesen Unterschied? Gibt es irgendeine Konfiguration, die ich auf MongoDB anwenden oder Express-Anwendung parsen muss, um das gleiche Ergebnis zu erhalten, wie das Parsing-Backend gibt.

Antwort

2

Es ist ein Problem mit Parse.Promise.when Funktion. Seine Implementierung scheint sich mit this commit geändert zu haben.

Damals funktionierte when Funktion alle Ergebnisse auf Ihre Callback-Funktion unabhängig davon, wie Sie Eingaben an when liefern. Diese Aufrufe führen zur gleichen Ausgabe:

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

Jetzt ist dieses Verhalten geändert. Wenn Sie Eingabeversprechen als Array angeben, wird es als ein Array zurückgegeben. Wenn Sie dies tun, wird es als Argumente verwendet. Siehe this line in commit.

+1

Autsch, ein "adaptives wenn()" fällt irgendwo zwischen großartig und verwirrend. Gewöhnungsbedürftig. –

Verwandte Themen