我有一个 Web 应用程序,我的应用程序的前端使用 Angular js。我在 Angular JS Controller 中有一个方法,称为单击按钮。在该方法中,我调用 Angular 服务向 Java Controller 发送请求。逻辑是这样的
var submitted= true;
submitted= sampleService.sampleMethod(sampleParam);
alert(submitted);
if(!submitted){
//some action
}
如果请求成功,服务将返回 true,如果失败,则返回 false。 我遇到的问题是我在发送请求之前收到警报(警报显示未定义)。因此,无论响应如何,if 条件都会失败。
这个问题有解决办法吗?
编辑:
示例方法
this.sampleMethod = function (sampleServiceMethod, obj){
var modalInstance = $modal.open({
templateUrl: 'example.html',
controller: 'anotherController',
resolve: {
modalServiceMethod: function () {
return sampleServiceMethod;
}
}
});
modalInstance.result.then(function (modalServiceMethod) {
modalServiceMethod(obj).then(function(response){
$window.location = response.sampleUrl;
}, function(err) {
$log.error("error occured", err);
});
}, function () {
$log.debug('error on: ' + new Date());
}).finally(function() {
return false;
});
};
基本上,如果请求成功,页面将被重定向。但我需要在失败期间返回 false 值以进行必要的更改。
最佳答案
** 更新 #1 ** 如果您稍微组织和重命名代码,我可以提供更好的帮助。当所有名字没有任何意义时,很难理解它们。
首先尝试在 modalInstance::之前添加此 return 语句
return modalInstance.result.then(function (modalServiceMethod) {
modalServiceMethod(obj).then(function(response){
$window.location = response.sampleUrl;
}, function(err) {
$log.error("error occured", err);
});
}, function () {
$log.debug('error on: ' + new Date());
}).finally(function() {
return false;
});
** 原始答案 **
为什么要声明 Submitted 为 true,然后在其上运行 run 函数?
它看起来像这个函数:
sampleService.sampleMethod(sampleParam);
返回未定义。
添加该函数的代码,以便我们可以研究它。
如果该函数向服务器发送请求以获取数据,它将作为 promise 返回。在这种情况下,您的代码应该是:
sampleService.sampleMethod(sampleParam).then(function(response){
submitted = response.data;
conole.log(submitted)
});
但是您在警报中未定义而不是 promise 对象的事实表明您可能错过了您的sampleService.sampleMethod(sampleParam)方法中的“return”语句。该方法应该如下所示:
function sampleMethod(param) {
return $http.get('url', param)
}
关于javascript - 同步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31874337/