Javascript异步跳过if-else

Javascript async skips if-else

本文关键字:if-else 异步 Javascript      更新时间:2023-09-26

我有一个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) {
         });
}

您没有在parse()函数中返回item。您的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) {
         });
}