suchen

Heim  >  Fragen und Antworten  >  Hauptteil

angular.js - Angularjs1.5中如何返回一个空的Promise对象

在angular1.5.8中我在调用接口返回数据时,如果请求参数为空或undefined,则return,但是这个return返回的值位空没有.then,就报错了
事例代码:

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;
        })
    }
    

报错代码:

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)

我想在这边:

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

求问如何模拟一个空的promise对象?求解!谢谢!

世界只因有你世界只因有你2742 Tage vor1243

Antworte allen(2)Ich werde antworten

  • 大家讲道理

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

    Antwort
    0
  • 黄舟

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

    首先我这边用的是ng1+ts,需要注意先注入$q

    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;

    我找到了更好的方法

    Antwort
    0
  • StornierenAntwort