2016-03-09 12 views
9

ben basit bir sorgu var döndürür:Ayrıştırma Bulut kodu "ilk" sorgusu dizisi aşağıdaki gibi farklı sonuçlar

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

Bu işlevin oluşan bir dizi hazırlıyorum: pack dizisinde

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

, Question sınıfı için 16 farklı "ilk" sorgu var.

ben kod parçacığı aşağıdaki kullanarak bu sorguyu çalıştırıyorum:

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

argümanlar MongoDB veri almak benim sorgunun sonucudur.

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

Ben MongoLAB üzerinde tanımlı MongoDB ile benim yerel ayrıştırma örneğinde bu sorguyu çalıştırırsanız, aşağıdaki sonuçları verir: Ben ayrıştırma arka uçta bu sorguyu çalıştırırsanız aşağıdaki gibi

, argümanlar json biçimi gösterilmiştir:

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

Bu farklılığın nedeni nedir? MongoDB veya parse express uygulamasında, back back verirken aynı sonucu elde etmek için başvurmam gereken herhangi bir konfigürasyon var mı?

cevap

2

Bu, Parse.Promise.when işleviyle ilgili bir sorundur. Uygulaması this taahhüt ile değiştirilmiştir.

O when fonksiyonu when girdi tedariki nasıl olursa olsun geri arama işlevi Tüm sonuçları uygulayarak edildi. Bu çağrılar aynı çıkışına neden:

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

Şimdi, bu davranış değiştirilir. Eğer dizi olarak girdi vaatleri verirseniz, bir dizi olarak dönecektir, bunu yaparsanız argümanlar olarak uygulanacaktır. Bakınız this line in commit.

+1

Ouch, "adaptif when()", muhteşem ve kafa karıştırıcı arasında bir yere düşer. Alışmak biraz zaman alacak. –