背景:我有一个带有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;
});
}
javascript代码,我称之为
if (workflowStatus == "Start") {
var returnHttp = $paymentFormsService.paymentFormRoleValidationBeforeSubmit(parseInt($rootScope.contractId), parseInt($rootScope.payFormId));
flagValue = returnHttp;
}
在这个fire方法中,我正在检查flagValue是true还是false,然后执行其他任务,但是这个值是undefine,而else部分正在执行
setTimeout(fire(workflowStatus,flagValue),5000);
function fire(workflowStatus,flagValue){ if(flagValue === true){ //如果value为true,则保存在数据库中。 } 其他{ //这里我在UI屏幕上显示错误弹出窗口 } }
但在我的情况下,我每次都会收到错误弹出窗口,因为API尚未返回值且flagValue未定义。这个弹出窗口显示出来了。之后,然后API返回它以异步方式工作的值。
或者还有其他方法可以帮我更新..这是我的制作问题。
答案 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) {
});