拒绝$ q.defer导致未处理的拒绝错误被抛出

时间:2017-03-13 09:53:43

标签: angularjs

我最近从1.5更新到1.6.3并且使用$ q服务使用deferred promise对象的代码,现在我的单元测试运行中出现以下错误:

Possibly unhandled rejection: undefined thrown

以下是我在代码中使用延迟保证的函数的典型结构:

public someFunction = () => {
    const deferred = this.$q.defer();
    if (someConditionIsTrue) {
        this.myService.getThings().then((response) => {
            deferred.resolve(response);
        });
    } else {
        deferred.reject();
    }
    return deferred.promise;
};

当单元测试else条件时,我会抛出此错误(使用karma \ jasmine \ phantomJS)

我已经配置了以下内容:

config(['$qProvider', ($qProvider) => {
        $qProvider.errorOnUnhandledRejections(false);
      }])

有人能指出我正确的方向吗?

由于

1 个答案:

答案 0 :(得分:0)

Angular建议你处理承诺的每一条可能路线。

目前您缺少此部分:

public someFunction = () => {
    const deferred = this.$q.defer();
    if (someConditionIsTrue) {
        this.myService.getThings().then((response) => {
            deferred.resolve(response);
        });
        // what happen if this promise is rejected?
    } else {
        deferred.reject();
    }
    return deferred.promise;
};

虽然您可以在评论部分添加.catch,但我建议您更改整个结构,以获得更清晰的代码并更轻松地进行维护:

public someFunction = () => {
    if (someConditionIsTrue) {
        return this.myService.getThings();
        // this will pass back whatever resolve/reject to upper layer
    } else {
        return $q.reject();
    }
};