在不影响 angularjs 承诺的情况下延迟 $http.get 调用

Delay $http.get call without affecting angularjs promise

请注意,我已经阅读了所有与我的问题有些相关的 Whosebug 问题,但其中 none 确实回答了我的问题。请不要在没有完全理解我的问题的情况下将其标记为重复。

这是我的担忧:

我想在不影响 angular 承诺的情况下延迟 angularJS $http.get 调用。现在下面的代码在这一行中抛出一个 "angular-1.3.15.js:11655 TypeError: Cannot read property 'then' of undefined":

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 实际上应该是 return promise 数组,因为其他函数需要它。

非常感谢您的帮助!

让我知道更多 questions/clarifications。

谢谢!

$timeout return 是一个承诺,所以你可以 return 那,然后 return 来自 $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;
    });
};