此我的加价代码
<button id="btnUploadFiles" class="col-lg-offset-1 col-lg-2 col-md-6 col-sm-4 btn primaryButton" data-ng-click="uploadFilesToPdm()">
<span class=" btn-circle"></span>
Upload
</button>
我的控制器代码
$scope.uploadFilesToPdm = function () {
if (validateLoad()){do something further...}
}
function validateLoad() {
selectedItems = {
EnvironmentId: 52,
ApplicationId: 23,
UserId: ""
}
var data = fileUploadService.validateLoad.save({}, selectedItems);
data.$promise.then(function (response) {
if (!response.isValid) {
alert(warning.messageMandatoryFileLoad + response.requiredFileType);
}
return response.isValid;
}, function (error) {
});
}
我的WebApi方法返回true并且工作正常。 并且在ValidateLoad()方法中也会捕获响应。
然而,在uploadFilesToPdm中,如果条件无法评估并且函数不会继续“进一步做某事......”。如果我遗漏了什么,请建议。
答案 0 :(得分:0)
您可以通过返回承诺来处理它:
$scope.uploadFilesToPdm = function() {
validateLoad().then(function(response) {
if (!response.isValid) {
return alert(warning.messageMandatoryFileLoad + response.requiredFileType);
}
//do something further..
}, function(error) {});
}
function validateLoad() {
selectedItems = {
EnvironmentId: 52,
ApplicationId: 23,
UserId: ""
}
return fileUploadService.validateLoad.save({}, selectedItems).$promise;
}
答案 1 :(得分:0)
你的validateLoad()
函数没有返回任何内容,这意味着它会有效地返回underfined,这是假的。
您需要从该函数返回一个布尔值。但那是不可能的,因为你只会在函数返回后很久才知道布尔值。只有在文件上传完成后才会知道布尔值。所以你可以返回的是布尔的承诺。但是你无法检查承诺是真是假。您只能检查它是否已解析为true或false:
$scope.uploadFilesToPdm = function () {
validateLoad().then(function(valid) {
if (valid) {do something further...}
});
};
function validateLoad() {
selectedItems = {
EnvironmentId: 52,
ApplicationId: 23,
UserId: ""
}
var data = fileUploadService.validateLoad.save({}, selectedItems);
return data.$promise.then(function (response) {
if (!response.isValid) {
alert(warning.messageMandatoryFileLoad + response.requiredFileType);
}
return response.isValid;
});
}
阅读the blog post我写了关于承诺以及如何避免其陷阱的文章。
答案 2 :(得分:0)
正如卢卡斯在评论中所说:你需要“等待”异步电话才能完成。在您的情况下实现这一目标的最简单方法是从validateLoad()
函数返回承诺,就像TJ的答案所示。
还有另一种方法可以使用$ q,它是一个反模式,但有时用于代码分离。
function validateLoad() {
q = $q.defered();
selectedItems = {
EnvironmentId: 52,
ApplicationId: 23,
UserId: ""
}
var data = fileUploadService.validateLoad.save({}, selectedItems);
return data.$promise.then(function (response) {
if (!response.isValid) {
alert(warning.messageMandatoryFileLoad + response.requiredFileType);
q.reject(false);
}
q.resolve(response.isValid);
});
return q.promise;
}
在这种情况下,您创建另一个承诺,然后返回,然后在$scope.uploadFilesToPdm
函数中使用。