[我在Angularjs中有一些函数,这些函数承担一些业务,也称为获取数据的服务,如何使我的代码同步运行(希望我的第一个函数结束以执行下一个函数?]
$scope.modalAction = function () {
$scope.UploadFile(),
$http.post(UriTempV2 + "/Template/InsertTemplate?OwnerRefId=" + $scope.OwnerRefId, $scope.newItem)
.then(function (response) {
//llenar newTemplate
CloseModal();
}, function (error) {
alert("Ocurrio un Error!!");
});
}
};
$scope.UploadFile = function () {
if (document.getElementById('file').files.length !== 0) {
var file = document.getElementById('file').files[0];
var uploadUrl = UriTempV2 + "/Template/TemplateFile";
var fd = new FormData();
fd.append('file', file);
fd.append('systemName', $scope.newItem.templateFile);
fd.append('instanceId', '698757BA-3D34-461D-A8FA-2D7E6BCDDC3C');
fd.append('enviroment', '90B28DB1-EE45-4F85-A1D4-0C0706737607');
fd.append('metaData', '{}');
$http({
url: uploadUrl,
method: "POST",
data: fd,
headers: { 'Content-Type': undefined }
}).then(function (response) {
if (response.status === 200) {
$scope.TemplateFile = response.data;
$scope.newItem.templateFile = $scope.TemplateFile.SystemName;
$scope.newItem.outputOriginalName = $scope.TemplateFile.OriginalName;
if ($scope.newItem.outPutType != 'bodyMail') {
$scope.CreateFields();
}
} else {
alert("Ocurrio un Error!!");
}
}, function (error) {
alert("Ocurrio un Error!!");
});
}
var templateFile = $scope.newItem.templateFile;
return templateFile
};
$scope.CreateFields = function () {
var uploadUrl = UriTempV2 + "/Template/Sync/" + $scope.newItem.id + "/" + $scope.newItem.templateFile;
$http.get(uploadUrl);
};
[想法是执行UploadFile函数,在此函数CreateFields中,并在它们的结尾执行服务"/ Template / InsertTemplate? OwnerRefId ="
,当后者完成时,将执行CloseModal
函数。
AngularJS框架不支持同步请求。另外,主线程上的many browsers have deprecated synchronous requests由于对用户体验产生负面影响。而是使用promise chaining创建顺序的XHR。
来自文档:
同步请求
注意:从Gecko 30.0(Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27),Blink 39.0和Edge 13开始,主线程上的同步请求由于对用户体验的负面影响而被弃用。
同步XHR请求通常会导致网络挂起。但是开发人员通常不会注意到此问题,因为挂起仅在网络状况不佳或远程服务器响应速度较慢时才表现出来。现在,同步XHR处于弃用状态。建议开发人员不要使用同步API,而应使用异步请求。
有关更多信息,请参阅