我想使用$q.all()
方法获得promise的返回值。
这是我到目前为止尝试过的。
var promise1 = function(time){
var defered = $q.defer();
var promise = defered.promise;
defered.resolve(time);
console.log(time);
return promise;
};
var promise2 = function(time){
var defered = $q.defer();
var promise = defered.promise;
defered.resolve(time);
console.log(time);
return promise;
};
我试图同时从time
和promise1
返回promise2
的方式
$q.all([promise1,promise2]).then(function(){
console.log("Worked");
console.log(promise1 + " , " + promise2);
//ref.close();
});
但是控制台会像这样打印promise的全部功能。
function (time){
var defered = $q.defer();
var promise = defered.promise;
defered.resolve(time);
console.log(time);
return promise;
},function (time){
var defered = $q.defer();
var promise = defered.promise;
defered.resolve(time);
console.log(time);
return promise;
}
答案 0 :(得分:1)
这是因为您没有在两个函数(promise1和promise2)上调用和传递时间值。
如果您将以这种方式实现 [promise1,promise2] ,则$ q.all仍将运行它,但将返回一个函数而不是一个值,因为您有一个带有参数{{ 1}}尚未填写。
兑现您的承诺的价值,例如: 500(500毫秒)。有了它,您的 $ q.all
就可以使用了function (time) {}
因为仅传递 [promise1,promise2] 就像传递一个原始函数,该函数等待调用者在另一个函数中内部调用它们,例如promise1(),promise2()
示例场景:
$q.all([promise1(500),promise2(500)]).then(function(data) {
console.log("Worked");
console.log(data);
});