AngularJS:在承诺

时间:2015-04-30 06:07:48

标签: javascript angularjs promise angular-resource

我正在尝试构建一个通用的过滤器,它需要能够处理 - 基于配置 - 参数。资源实例和服务。

我有以下工厂代码:

angular.module('sample').factory('Sample', function($resource) {
  var methods = {
    search: {
      method: 'POST',
      isArray: true
    }
  }
  var Sample = new $resource('/sample', methods);

  Sample.prototype.elasticFilter = function (search) {
    var query = {
      query: {
        filtered: {
          query: {
            wildcard: {
              name: '*' + search.toLowerCase() + '*'
            }
          }
        }
      }
    }
    return this.$search(query);
  }
  return Sample;
});

现在如果我在我的指令中执行以下操作:

scope.search = function (search) {
  Sample.elasticFilter(search).$promise.then(function () {
    handle
  });

这导致

  TypeError: Cannot read property 'then' of undefined

打印Sample.elasticFilter(search),结果直接为Promise

修改指令以直接关闭Sample.elasticFilter(search).then导致:

TypeError: value.push is not a function

对于非实例资源(例如NOT not up up,而不是直接服务),.$promise工作正常。

为什么会这样?我该如何解决这个问题?资源什么时候有$ promise,什么时候没有?

1 个答案:

答案 0 :(得分:0)

这似乎是“功能”https://github.com/angular/angular.js/issues/11767

真正解决此问题的唯一方法是不在实例级资源方法上使用isArray。