Javascript 使用$http的角度引导typeahead

Javascript 使用$http的角度引导typeahead,javascript,angularjs,Javascript,Angularjs,我尝试将angular bootstrap的typeahead插件与$http服务结合使用。首先,我使用$http.success()如下: $scope.filterProvinces = function(val){ return service.provinceList({ pageSize : 10, queryKey : val }).success(function(data, status, headers, config){

我尝试将angular bootstrap的typeahead插件与$http服务结合使用。首先,我使用$http.success()如下:

$scope.filterProvinces = function(val){
    return service.provinceList({
         pageSize : 10,
         queryKey : val
     }).success(function(data, status, headers, config){
          return data.data.list;
       }
     ).error(function(data, status, headers, config){
          alert("no result!");
          return ;
     });
}
$scope.filterProvinces = function(val){
    return service.provinceList({
         pageSize : 10,
         queryKey : val
     }).then(function(response){
         return response.data.data.list;
     });
}
但它不起作用,所以我更改了代码,如下所示:

$scope.filterProvinces = function(val){
    return service.provinceList({
         pageSize : 10,
         queryKey : val
     }).success(function(data, status, headers, config){
          return data.data.list;
       }
     ).error(function(data, status, headers, config){
          alert("no result!");
          return ;
     });
}
$scope.filterProvinces = function(val){
    return service.provinceList({
         pageSize : 10,
         queryKey : val
     }).then(function(response){
         return response.data.data.list;
     });
}

它在工作,所以我很困惑。为什么then()可以,但success()不正确

如果您检查AngularJS,您会发现
.success()
实际上将函数本身作为参数,然后调用该参数,传入解构的响应对象,最终调用
.then()
来解析承诺

由于缺乏明确性,这实际上已被弃用,而的文档建议使用
.then()

$http legacy promise方法的成功和错误已被删除 不赞成。改用标准then方法。如果 $httpProvider.useLegacyPromiseExtensions设置为false,则这些 方法将抛出$http/legacy错误


值得检查以确保没有抛出此错误

typeahead指令可以与静态数组/集合或承诺一起使用<代码>成功和
错误
不是标准的承诺方法。看见