2016-03-09 31 views
9

Ho una semplice query come segue:codice Parse Cloud "primo" matrice interrogazione restituisce risultati diversi

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

sto preparando una serie consistente di questa funzione:

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 matrice, esistono 16 diverse "prime" query per la classe Question.

Sto facendo funzionare questa query usando seguente frammento di codice:

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

argomenti è il risultato della mia interrogazione recupero dei dati da MongoDB.

Se eseguo questa ricerca backend parse, argomenti formato JSON è mostrato come di seguito:

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

Se eseguo questa ricerca il mio esempio di parsing locale con MongoDB definita su MongoLAB, dà il seguente risultato:

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

Qual è il motivo di questa differenza? C'è qualche configurazione che devo applicare su MongoDB o un'applicazione express parse per ottenere lo stesso risultato dato dal backend di analisi.

risposta

2

È un problema con la funzione Parse.Promise.when. La sua implementazione sembra cambiata con il commit this.

Indietro quindi la funzione when applicava tutti i risultati alla funzione di richiamata indipendentemente da come si forniscono gli ingressi a when. Queste chiamate hanno come risultato lo stesso output:

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

Ora, questo comportamento è stato modificato. Restituirà come una matrice se fornisci promesse di input come array, si applicherà come argomenti se lo fai. Vedi this line in commit.

+1

Ouch, un "adattivo quando()" cade da qualche parte tra il magnifico e il confuso. Ci vorrà un po 'di tempo per abituarsi. –