我已使用$q
服务与Angular建立了承诺。
var get = function() {
var defer = $q.defer();
setTimeout(function() {
defer.resolve('test');
}, 1000);
return defer.promise;
}
当我调用此函数时,它会返回预期的数据,如下所示:
var promise1 = api.get().then(function(data){
console.log(data); //logs test
});
var promise2 = api.get().then(function(data){
console.log(data); //logs test
});
但是当我使用all
方法时,我得到一个包含undefined
两次的数组。
$q.all([promise1, promise2]).then(function(data){
console.log(data); //logs [undefined, undefined];
});
我在这里错过了什么吗?
答案 0 :(得分:6)
您必须从回调
返回数据试试这个
var promise1 = function(){
return api.get().then(function(data){
return data;
});
}
答案 1 :(得分:1)
必须这样:
var promise1 = api.get();
var promise2 = api.get();
然后,promise1和promise2的类型为“promise”,您可以在$ q.all()中使用它们。
$q.all([promise1, promise2]).then(function(data){
console.log(data); //logs ['test', 'test'];
});