如何重用http请求结果?

时间:2015-11-24 21:08:51

标签: javascript angularjs

您好我正在尝试为我的代码提出请求。

我有类似

的东西
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 } 为假,我仍然需要提出获取产品名称的请求,但我不想在不同条件下提出两个相同的请求是切实可行的。我想知道是否有更好的方法来做到这一点。谢谢你的帮助!

2 个答案:

答案 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在请求启动和请求完成之间发生更改而导致的错误。

了解更多信息Immediately-invoked function expressions