延迟$ http.get调用而不影响angularjs promise

时间:2017-05-24 20:19:20

标签: angularjs angular-promise angular-http

请注意,我已经阅读了与我的问题有些相关的所有StackOverflow问题,但这些问题都没有真正回答我的问题。如果没有完全理解我的问题,请不要将其标记为重复。

这是我的担忧:

我想在不影响角度承诺的情况下延迟angularJS $ http.get调用。现在,下面的代码在这一行中引发了“angular-1.3.15.js:11655 TypeError:无法读取属性'然后'未定义”:

updatedPromise = promise.then(功能(价格)

这是我的部分代码:

MyAPP.service('FirstService', ['$q','$http', 'Constants', 'SecondService', 'UtilityService', function($q, $http, Constants, SecondService, UtilityService) {

    var self = this;

    var processFunction = function(AnArray) {

        var updatedPromise;
        var promises=[];

        angular.forEach(AnArray, function(itemObj, index) 
        {
            var totalWorth = "";

            if(itemObj.name != "")
            {
                var promise = SecondService.getPrice(itemObj.name);

                updatedPromise = promise.then(function(price){

                    itemObj.price = price;
                    return itemObj;

                }, function(error){

                    console.log('[+] Retrieving price has an error: ', error);

                });

                promises.push(updatedPromise);
            }
            else
            {
                console.log("Error!");
            }

        });

        return $q.all(promises);
    };
);


MyAPP.service('SecondService', ['$timeout','$http', 'Constants', function($timeout, $http, Constants) {

    var self = this;
    var URL = "/getPrice";

    self.getPrice = function(itemName){

        $timeout(function(){

            var promise;

            promise = $http({
                url: URL,
                method: 'POST',
                data: {_itemName : itemName},
                headers: {'Content-Type': 'application/json'}
              }).then(function(response) {
                return response.data;
                }, function(response) {
                console.log("Response: " + response.data);
                return response.data;
               });
            return promise;

        }, 3500);

        console.log("[-]getPrice");
    };

}]);

请注意,processFunction应该真正返回一个promises数组,因为在其他函数中需要它。

非常感谢您的帮助!

让我知道进一步的问题/澄清。

谢谢!

1 个答案:

答案 0 :(得分:2)

$http会返回一个承诺,因此您可以返回该承诺,然后从self.getPrice = function (itemName) { return $timeout(3500).then(function () { return $http({ url: URL, method: 'POST', data: { _itemName: itemName }, headers: { 'Content-Type': 'application/json' } }); }).then(function (response) { return response.data; }, function (response) { console.log("Response: " + response.data); return response.data; }); }; 返回承诺:

keyup