首页 > 解决方案 > Angular Promise 有条件的

问题描述

单击按钮时,我的 Angular v1.x 指令会调用一个函数,并根据输入设置一些变量:

$scope.offerRespond = function() {

        if (offer.i.offerResponse == 1) {  
             // set some variables
        }

        else if (offer.i.offerResponse == 0) { 

             $http({method: 'GET', url: frontbaseurl+'/offer_types/' + id + '.json'})
             .then(function successCallback(response) { 
                  $scope.reason = response.data.data.name;
             }, function errorCallback() {
                  $scope.reason = "Unknown";
             }

        );

        $http.post(frontbaseurl+'/purchases.json', JSON.stringify(dataObj))
        .then(function(response){ 

             // continue....

        }
}

可以看出,如果 offerResponse == 0,我会发出 GET 请求。这似乎很冒险,因为在收到请求的响应之前代码会继续执行。我知道方法是使用“承诺”,但是如果可能无法发出 GET 请求,这在这种情况下如何应用?

我看到的问题是,如果我添加一个承诺并且 offerResponse == 1,则该承诺无法实现,因为不会发出 GET 请求。

请问有什么建议吗?

标签: angularjspromisegetrequest

解决方案


我不得不在我们的 Angular 1.x 应用程序中使用 Typescript 做类似的事情,如下所示:

public myFunc = async (id): Promise<void> => {
    return new Promise<void>(async (resolve, reject) => {
        if (this.offer.i.offerResponse === 1) {  
            // set some variables
            resolve();
        }
        else if (this.offer.i.offerResponse === 0) { 

            try {
                const response = await services.getOfferTypes(id);
                this.reason = response.data.data.name;
                resolve();
            } catch (errorResponse) {
                this.reason = "Unknown";
                reject();
            }
        }
    });
}

请注意,我将您的 http 请求“封装”在一个服务函数中。我喜欢将 api 调用分离到它们自己的服务中,以保持内容简洁易读。这段代码未经测试,但如果我没记错的话它应该像这样工作。


推荐阅读