在不影响 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;
});
};
请注意,我已经阅读了所有与我的问题有些相关的 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;
});
};