同步通话

时间:2015-08-07 09:30:43

标签: javascript html angularjs

我有一个网络应用程序,我的应用程序的前端使用角度js。我在角度js控制器中有一个方法,只需单击一个按钮即可调用。在该方法中,我调用angular服务向Java控制器发送请求。逻辑看起来像这样

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 个答案:

答案 0 :(得分:1)

**更新#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;
         });

**原始答案**

为什么声明提交为true然后在其上运行运行函数?

看起来像这个功能:

sampleService.sampleMethod(sampleParam);

返回undefined。

添加该功能的代码,以便我们查看。

如果该函数向服务器发送请求以获取数据,则它将作为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)
}