我有一个AngularJS函数可以从数据库中获取一些数据。根据数据填充到数据库的方式,我不会立即获得我正在寻找的一些数据(我确实在原始调用的一两秒内恢复了数据)。我想要做的是检查从数据库返回的结果,如果某个类型还没有,那么推送另一个承诺"这将再次从数据库中获取数据。到目前为止,这是我的功能:
function getResponses(ids,user) {
var deferred = $q.defer();
var promises = [];
var idsString = "";
angular.forEach(ids, function (id) {
idsString += "," + id;
});
idsString = idsString.substring(1);
//Get Response calls retrieves the data from the database
promises.push(getResponse(idsString, user));
$q.all(promises).then(function(results) {
deferred.resolve(results);
});
return deferred.promise;
}
到目前为止,我最大的问题是我会在哪里检查"检查结果"部分?我认为它会进入$ q.all块,但是我需要先从数据库中解析结果,还是只检查数据库中的结果,如果它们包含所有必需的类型,解决它呢?如果它没有得到解决,只需继续按$间隔推送getResponse承诺,直到所需的结果回来?
我要求甚至可能吗?
由于
答案 0 :(得分:0)
没有必要使用$q.defer
制作承诺,因为$q.all
已经返回承诺:
function getResponses(ids,user) {
//var deferred = $q.defer();
var promises = [];
var idsString = "";
angular.forEach(ids, function (id) {
idsString += "," + id;
});
idsString = idsString.substring(1);
//Get Response calls retrieves the data from the database
promises.push(getResponse(idsString, user));
/* NOT needed
$q.all(promises).then(function(results) {
deferred.resolve(results);
});
return deferred.promise;
*/
//INSTEAD return promise from $q.all
return $q.all(promises);
}