javascript - 同步调用

标签 javascript html angularjs

我有一个 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/

相关文章:

javascript - 带有 SQL 查询问题的准备语句

html - 如何在不同的 Div 中对齐这些表格

javascript - 更改路线不会在新页面中滚动到顶部

javascript - 如何使用 ng-hide 根据 angularjs 中的特定条件仅显示选定的 div 元素

angularjs - Angular JS - 获取选择控件的选定文本

javascript - React-router-dom 页面导航

javascript - 在 Angular 中创建具有完整独立 CSS 的页面

javascript - 弹出窗口打开时停止刷新

Javascript 函数适用于本地镜像,但不适用于从 Ajax 请求获取的图像

html - CSS 图像在另一个带有 div 的图像中