在角度js 1.x

时间:2017-12-09 11:11:58

标签: javascript angularjs

背景:我有一个带有GET方法的Web API并返回布尔值。 一旦我收到这个值,我就需要执行一些操作。

问题:我的代码达到了在API返回值之前检查此布尔值的情况。我无法等到API返回值。在下面的代码中,Javascript执行到达“setTimeout”语句。

我的R& D:我已经应用了这个setTimeout来延迟执行,但是值仍然来自api并且javascript正在处理。

代码:使用AngularJS 1.6版本 我已尝试使用$ http.get()和$ http({//在此设置配置})两种方式;

实际代码: 1.我在调用服务的代码

paymentFormRoleValidationBeforeSubmit: function (contractId, payFormId) {
        return $http({
            url: 'some api url',
            method: "GET",
            headers: serviceheader,
            config: serviceconfig
        }).success(function (data, status, headers, serviceheader) {
            return data.value;
        }).error(function (data, status, header, serviceheader) {
                console.log("** Fail -- before submitting role checked is failed.")
                return false;
        });
    }
  1. javascript代码,我称之为

    if (workflowStatus == "Start") {
            var returnHttp = $paymentFormsService.paymentFormRoleValidationBeforeSubmit(parseInt($rootScope.contractId), parseInt($rootScope.payFormId));
                        flagValue = returnHttp;
                    }
    
  2. 在这个fire方法中,我正在检查flagValue是true还是false,然后执行其他任务,但是这个值是undefine,而else部分正在执行

    setTimeout(fire(workflowStatus,flagValue),5000);

    function fire(workflowStatus,flagValue){  if(flagValue === true){      //如果value为true,则保存在数据库中。  }  其他{     //这里我在UI屏幕上显示错误弹出窗口  } }

  3. 但在我的情况下,我每次都会收到错误弹出窗口,因为API尚未返回值且flagValue未定义。这个弹出窗口显示出来了。之后,然后API返回它以异步方式工作的值。

    或者还有其他方法可以帮我更新..这是我的制作问题。

1 个答案:

答案 0 :(得分:1)

我认为您应该在您的服务中执行您的http请求,并在您致电服务时获得承诺。这样,您可以在http调用返回promise时设置标志。

服务

paymentFormRoleValidationBeforeSubmit = function (contractId, payFormId) {
    var request = $http({
        url: 'some api url',
        method: "GET",
        headers: serviceheader,
        config: serviceconfig
    });
    return request;
}

您调用服务的代码

var promiseGet = $paymentFormsService.paymentFormRoleValidationBeforeSubmit(parseInt($rootScope.contractId), parseInt($rootScope.payFormId));;
promiseGet.then(function (returnHttp) {
    flagValue = returnHttp;
},
function (errorPl) {

});