根据结果​​重复Angular承诺?

时间:2017-02-17 22:18:06

标签: javascript angularjs angular-promise

我有一个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承诺,直到所需的结果回来?

我要求甚至可能吗?

由于

1 个答案:

答案 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);
}