【问题标题】:Angular Promise ConditionalAngular Promise 有条件的
【发布时间】:2018-09-24 23:47:05
【问题描述】:

我的 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 请求。

有什么建议吗?

【问题讨论】:

    标签: angularjs promise get request


    【解决方案1】:

    我不得不在我们的 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 调用分离到它们自己的服务中,以保持内容简洁易读。这段代码未经测试,但如果我没记错的话它应该像这样工作。

    【讨论】:

    • 谢谢 - 大概 resolve() 是在这两种情况下都实现的任意函数?我已经实施了这种方法,它似乎有效。
    猜你喜欢
    • 2019-06-10
    • 2014-04-30
    • 2016-09-16
    • 1970-01-01
    • 2016-10-31
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多