search

Home  >  Q&A  >  body text

angular.js - How to return an empty Promise object in Angularjs1.5

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!

世界只因有你世界只因有你2823 days ago1290

reply all(2)I'll reply

  • 大家讲道理

    大家讲道理2017-05-15 17:16:26

    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('无法获取到正确的数据'))
      }
    }

    reply
    0
  • 黄舟

    黄舟2017-05-15 17:16:26

    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

    reply
    0
  • Cancelreply