从需要异步调用的函数返回值

时间:2015-09-11 05:58:22

标签: javascript angularjs

我们的付款网关提供了一个嵌入式窗口小部件,我们可以在付款页面上使用。他们有一个javascript事件,当用户点击"现在付款"按钮,我们可以在卡提交到支付网关之前运行一些JavaScript代码。如果我们从此函数返回true,则将提交卡数据,但如果我们返回false,则不会提交卡数据。

当买家点击“#34;立即付款”时,我们希望对我们的服务器进行AJAX调用。并在继续将支付数据提交给支付网关之前更改有关购买的一些信息。但是,此调用是异步的,因此在成功调用后返回true不起作用。

这是我们使用的代码。支付网关支付脚本使用wpwlOptions。我们正在使用Angular。 onBeforeSubmitCard是问题的所在,我们没有办法改变支付网关如何处理它,它想要的只是真或假。

window.wpwlOptions = {
            style: "plain",
            onReady: function() {
                $scope.checkouted=true;
                $scope.$apply();
            },
            onBeforeSubmitCard: function () {                  
                paymentService.extendCheckout(checkoutData).then(function (response) {

                    if (response.extendedUntil) {
                        console.log(response);
                        return true;
                    }
                    else {
                        tpBootstrapUtilities.showErrorPopup({ message: 'An error occurred, please contact support@ticketpony.co.za' });
                        return false;
                    }
                }, function () {
                    $scope.failed = true;
                    tpBootstrapUtilities.showErrorPopup({ message: 'An error occurred, please contact support@ticketpony.co.za' });
                    return false;
                });

            }
        };

然后来自paymentService的extendCheckout如下:

extendCheckout: function (data) {
            var deferred = $q.defer();
            $http({
                url: ENVIRONMENT_CONSTANTS.SERVICES_URI + SYSTEM_CONSTANTS.SERVICES.PAYMENT + '/extend',
                method: 'POST',
                data: data
            }).success(function (response) {
                deferred.resolve(response);
            }).error(function (response) {
                deferred.reject(response);
            });
            return deferred.promise;
        },

由于

0 个答案:

没有答案