Javascript承诺 - 多次返回回调

时间:2016-04-04 08:52:02

标签: javascript parse-platform

我正在使用Parse.com。每个包装内都有许多钻头,每个类别都有很多包装。

我坚持.then(函数(结果,结果2,结果3)在最后一行。承诺可以有多个承诺,它是可变的。有没有办法得到类似的东西:

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

谢谢!

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){
	
	query2.equalTo("category_id", cat[0]);
	return query2.find();

}).then(function(results){

	var promises = [];

  	_.each(results, function(result) {

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

  			promises.push(query3.find());

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

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

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


});

1 个答案:

答案 0 :(得分:1)

由于承诺的固有性质,它可能只能解析为单一价值。这就是说你可能想要做的是看看Promise.all API。 Promise.all将从一系列承诺中创建一个新的承诺,它将在您的所有承诺得到解决时解决。 E.g。

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

Mozilla Promise 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"] 
});