当我通过控制台记录具有3个主要元素的对象时,我希望得到的数据有变化:
HERE ARE THE VARIATIONS IN THE ARRAYS , then the results are:
Object {usr: Object, cat: Array[2], exp: Array[2]} // Incomplete data
Object {usr: Object, cat: Array[3], exp: Array[3]} // complete data
使用DexieJS库从indexedDB获取此数据。我有一个函数调用3个函数来获取usr,cat,exp的所有数据。我错过了cat和exp函数中的数据。使用不好的承诺我的猜测是缺失的。 这是获取cat的数据(和更改名称几乎相同):
regresarCat: function () {
var deferred = $q.defer();
var cats = [];
var count = 0;
db.transaction("rw", db.categories, function () {
db.categories.orderBy('nameCat').each(function (cat) {
cats[count] = cat;
count++;
deferred.resolve(cats);
});
}).catch (function (e) {
deferred.reject(e);
});
return deferred.promise;
}
get all data function(regresarTodo)是下一个:
regresarTodo: function(){
var deferred = $q.defer();
var todo = [];
this.regresarUsr().then(function(user){
todo['usr'] = user;
deferred.resolve(todo);
return deferred.promise;
}).catch(function(e) {
deferred.reject(e)
});
this.regresarCat().then(function(cate){
todo['cat'] = cate;
deferred.resolve(todo);
return deferred.promise;
}).catch(function(e) {
deferred.reject(e)
});
this.regresarExp().then(function(exps){
todo['exp'] = exps;
deferred.resolve(todo);
return deferred.promise;
}).catch(function(e) {
deferred.reject(e)
});
$q.all({ usr: this.regresarUsr(), cat: this.regresarCat(), exp: this.regresarExp() }).then(function(respuesta){
console.log('Got promise');
console.log(respuesta);
deferred.resolve(respuesta);
});
return deferred.promise;
}
我无法找到我的错误,我看到了这些变化,因为我用一个间隔调用了regresarTodo函数,我看到第一次并不总是完整的,有时第二次打印完成但保留了变化。我需要在第一时间获取所有数据。很遗憾,谢谢
答案 0 :(得分:0)
您基本上需要为每个调用使用不同的延迟对象。并且您需要在收到来自该呼叫的数据后解析相应的延迟。
然后随后形成一个包含所有上述延迟对象的promise的数组,并在
中使用该数组$q.all(allPromisesArray).then(function(){
/* your stuff here */
})