基于结果重复角度承诺?
问题描述:
我有一个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承诺在一个$间隔,直到期望的结果回来?
我甚至要求甚至可能吗?
感谢
答
没有必要制造与$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);
}
所以,基本上你要查询的数据库中特定类型的值?如果是这样,创建一个接受类型参数并解析该特定值的函数将更为合理。通过这种方式,您可以创建一系列承诺,等待所有承诺,并在他们全部解决后获得您的价值观。 –