2017-03-13 3 views
0

Ich habe vor kurzem von 1.5 bis 1.6.3 aktualisiert und habe Code, wo ich verzögerte Versprechen Objekte mit dem $ q Service, der jetzt die folgenden Fehler in meinem wirft Unit-Test läuft:

Possibly unhandled rejection: undefined thrown 

Hier ist die typische Struktur einer Funktion, die ich in meinem Code habe, der ein latentes Versprechen verwendet:

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

Wenn das Gerät der Prüfung die sonst Bedingung ich diesen Fehler geworfen (mit Karma \ Jasmin \ PhantomJS)

Ich habe bereits auch folgende konfiguriert:

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

Kann jemand zeigen Sie mir in die richtige Richtung bitte?

Dank

+0

Können Sie versuchen, ein Argument in 'deferred.reject()' wie 'defered.reject (false) zu übergeben ' – codtex

+0

Ich habe versucht mit Ihrem Vorschlag und immer noch den Fehler, nur dieses Mal sagt es' möglicherweise unbehandelt Ablehnung: falsch geworfen' zuvor es sagte "unde Geldstrafe geworfen – mindparse

+1

Ja natürlich, jetzt verstehe ich. Sie erhalten diesen Fehler, weil Sie keine Funktion haben, um Ihre Zurückweisung zu behandeln, wie dies 'somePromise.then (function() {/ * das ist Auflösungsfunktion * /}, function() {/ * das ist Zurückweisungsfunktion */}) '. Lass mich wissen, ob das der Grund ist und ich eine Antwort posten kann. – codtex

Antwort

0

Angular schlagen Sie jeden möglichen Weg der Verheißung zu handhaben.

Derzeit fehlen Sie diesen Teil:

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

Während Sie ein .catch auf dem kommentierten Teil hinzufügen können, würde ich vorschlagen, die gesamte Struktur, wie dies für saubereren Code und einfachere Wartung Wechsel:

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