您好我正在尝试为我的代码提出请求。
我有类似
的东西authWithOAuthPopup
我的问题是,如果if(hasProduct) {
product.getProduct(, function(product) {
$scope.name = product.name;
$scope.price = product.price;
$scope.region = product.region;
//do other things.
})
} else {
product.getProduct(, function(product) {
$scope.name = product.name; // I need to get product name whether hasProduct is true or false
})
//do something
}
为假,我仍然需要提出获取产品名称的请求,但我不想在不同条件下提出两个相同的请求是切实可行的。我想知道是否有更好的方法来做到这一点。谢谢你的帮助!
答案 0 :(得分:3)
您可以发出一个请求并使用回调中的变量来分支您的逻辑。
product.getProduct(, (function(hasProduct) { return function(product) {
if (hasProduct) //do stuff
else //do other stuff
})(hasProduct));
如果hasProduct变量发生了变化(就像它在循环中一样),你可以像这样包装回调函数,这样就可以绑定hasProduct变量:
$twoDecNum = sprintf('%0.2f', round($number, 2));
答案 1 :(得分:2)
您可以在请求完成后重构代码以使用hasProduct
值。但如果你这样做:
请使用IIFE封口:
(function (hasProduct) {
product.getProduct(, function(product) {
//Executed asynchronously after request completes
$scope.name = product.name;
if (hasProduct) {
$scope.price = product.price;
$scope.region = product.region;
//do other things.
};
});
})(hasProduct);
通过使用IIFE闭包,hasProduct
的值将保留,并在请求的承诺结算时可用。这可以避免hasProduct
在请求启动和请求完成之间发生更改而导致的错误。