Javascript异步跳过if-else

时间:2015-06-09 18:37:54

标签: javascript angularjs asynchronous

我有一个if-else块,它在向服务器发出http.get()之前解析用户输入。但是,if-else继续被跳过。我尝试重新安排我的代码以强制它在调用get()之前完成if-else,但似乎没有任何工作。我也使用AngularJS。

//controller
function search($scope, $http, $location) 
{
    function parse(item)
    {
      if(item.match(/str1/g))
      {
        item = item.replace(/str1/g, 'one');
      }

      else if(item.match(/str2/g))
      {
        item = item.replace(/str2/g, 'two');
      }

      else if(item.match(/str3/g))
      {
        item = item.replace(/str3/g, 'three');
      }

      //ad infinitum
      return item;
    }

    $http.get('/search='+ parse($location.search().query.toLowerCase()))
         .success(function(data) {
            $scope.count = data.length;
            $scope.items = data;
            $scope.exists = data.length > 0;
         })
         .error(function(err) {

         });
}

1 个答案:

答案 0 :(得分:1)

您未在item函数中返回parse()。您的parse()函数被视为字符串,但没有返回值。

在你的功能结束时应该有一个返回,如下所示:

function parse(item)
{
  if(item.match(/str1/g))
  {
    item = item.replace(/str1/g, 'one');
  }

  else if(item.match(/str2/g))
  {
    item = item.replace(/str2/g, 'two');
  }

  else if(item.match(/str3/g))
  {
    item = item.replace(/str3/g, 'three');
  }

  //ad infinitum

  return item;

}

在此处阅读return语句:http://www.w3schools.com/jsref/jsref_return.asp

完成您尝试做的事情的另一种方法就是不创建本地parse()函数,只是直接在search()范围内进行字符串处理:

function search($scope, $http, $location) 
{
      var item = $location.search().query.toLowerCase();

      if(item.match(/str1/g))
      {
        item = item.replace(/str1/g, 'one');
      }

      else if(item.match(/str2/g))
      {
        item = item.replace(/str2/g, 'two');
      }

      else if(item.match(/str3/g))
      {
        item = item.replace(/str3/g, 'three');
      }

      //ad infinitum

    $http.get('/search='+ item)
         .success(function(data) {
            $scope.count = data.length;
            $scope.items = data;
            $scope.exists = data.length > 0;
         })
         .error(function(err) {

         });
}