angular.js - How to return an empty Promise object in Angularjs1.5
世界只因有你
世界只因有你 2017-05-15 17:14:26
0
2
1268

In angular1.5.8, when I call the interface to return data, if the request parameter is empty or undefined, then return, but the value returned by this return is empty and does not have .then, and an error is reported
Case code:

onGoodsNameAutoComplate = (value: string) => {
        if (!this.clientId || !this.$scope.goodsTypeId) {
            return;//这边返回就是空的,没有.then,则会报错
        };
        return this.goodsService.getList(this.clientId, value, this.$scope.goodsTypeId, 0, 5).then(res => {
            return res.data.list;
        })
    }
    

Error code:

TypeError: Cannot read property 'then' of undefined
    at T (angucomplete-alt.min.js:2)
    at $ (angucomplete-alt.min.js:2)
    at m.b.onFocusHandler (angucomplete-alt.min.js:2)
    at fn (eval at compile (angular.js:14817), <anonymous>:4:233)
    at b (angular.js:15906)
    at e (angular.js:25885)
    at m.$eval (angular.js:17682)
    at m.$apply (angular.js:17782)
    at HTMLInputElement.<anonymous> (angular.js:25890)
    at HTMLInputElement.dispatch (jquery.min.js:3)

I want to be here:

 if (!this.clientId || !this.$scope.goodsTypeId) {
                return;//这边模拟返回一个空的promise对象,就不会报错了。。。
            };

How to simulate an empty promise object? Find the solution! Thanks!

世界只因有你
世界只因有你

reply all(2)
大家讲道理
onGoodsNameAutoComplate = (value: string) => {
  return $q(function (resolve, reject) {
    if (!this.clientId || !this.$scope.goodsTypeId) {
      reject('xxx不能为空')
      return
    }
    this.goodsService.getList(this.clientId, value, this.$scope.goodsTypeId, 0, 5).then(
      res => {
        resolve(res.data.list)
      },
      () => reject('无法获取到正确的数据'))
  }
}
黄舟

First of all, I am using ng1+ts here. I need to pay attention to injecting $q first

private $q: ng.IQService
angular.module("app").controller("$q",demoController]);
 var deferred = this.$q.defer();
        if (!this.clientId || !this.$scope.goodsTypeId) {
            // deferred.resolve("well done!");
        } else {
            return this.goodsService.getList(this.clientId, value, this.$scope.goodsTypeId, 0, 5).then(res => {
                return res.data.list;
            })
        }
        return deferred.promise;

I found a better way

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template