2016-04-04 6 views
0

Ich benutze Parse.com. Es gibt viele Übungen in jedem Paket und viele Pakete in jeder Kategorie.Javascript verspricht - mehrere Rückrufe

Ich bin fest auf .then (function (Ergebnis result2, result3) in der letzten Zeile Das Versprechen mehr Versprechen haben kann und es ist variabel Gibt es eine Möglichkeit etwas zu lernen schreiben:..

.then(function(multipleResults); 
console.log(mulitpleResults); 

Dank!

var Parse = require('parse/node').Parse; 
 
var _ = require('underscore'); 
 

 
var TrainingPackage = Parse.Object.extend("TrainingPackage"); 
 
var TrainingCategory = Parse.Object.extend("TrainingCategory"); 
 

 
var query2 = new Parse.Query(TrainingPackage); 
 
var query = new Parse.Query(TrainingCategory); 
 

 
query.equalTo("objectId", "kfHnYdd3T1"); 
 

 
query.find().then(function(cat){ 
 
\t 
 
\t query2.equalTo("category_id", cat[0]); 
 
\t return query2.find(); 
 

 
}).then(function(results){ 
 

 
\t var promises = []; 
 

 
    \t _.each(results, function(result) { 
 

 
    \t \t \t var Drill = Parse.Object.extend("Drill"); 
 
    \t \t \t var query3 = new Parse.Query(Drill); 
 
\t \t \t 
 
\t \t \t query3.equalTo("package_id", result); 
 

 
    \t \t \t promises.push(query3.find()); 
 

 
    \t \t }); 
 
    
 
    \t return Parse.Promise.when(promises); 
 

 
}).then(function(result, result2, result3){ 
 

 
\t console.log(result); 
 
\t console.log(result2); 
 
\t console.log(result3); 
 

 

 
});

+0

Ja, so habe ich Promise.all und es funktionierte. –

Antwort

1

Aufgrund der inhärenten Natur eines Versprechens, es nur zu einem einzigen va lösen kann lue. Dies wird gesagt, was Sie wahrscheinlich tun möchten, werfen Sie einen Blick auf die Promise.all API. Promise.all wird aus einer Reihe von Versprechen ein neues Versprechen erstellen und es wird gelöst, wenn all Ihre Versprechen gelöst sind. Z.B.

Promise.all([promise1, promise2]).then(function(results) { 
    // Both promise1 and promise 2 resolved and available at variable results 
}) 

Arbeitsbeispiel von Mozilla Versprechen API:

var p1 = Promise.resolve(3); 
var p2 = 1337; 
var p3 = new Promise(function(resolve, reject) { 
    setTimeout(resolve, 100, "foo"); 
}); 

Promise.all([p1, p2, p3]).then(function(values) { 
    console.log(values); // [3, 1337, "foo"] 
});