我已经使用$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];
});
我错过了什么吗?
你必须从回调返回数据
试试这样
var promise1 = function(){
return api.get().then(function(data){
return data;
});
}
必须像这样:
var promise1 = api.get();
var promise2 = api.get();
那么,promise的类型是"promise",你可以在$q.all()中使用它们。
$q.all([promise1, promise2]).then(function(data){
console.log(data); //logs ['test', 'test'];
});