Wenn Sie den Wert möchten, übergeben Sie es in Ihrer Ausnahme.
Rx.Observable.of(42)
.map((val) => {
throw new AppError({message : 'oops!', contextInfo : {someName: 42}});
})
.catch((err) => {
// get it from the `err` object
});
Dies erfordert, dass Sie Ihre eigene Art von Fehlern (AppError
) implementieren, die von den nativen Error
erbt. Diese Technik ist nicht spezifisch für Rxjs
, kann aber überall angewendet werden. Error
ist ein Objekt, zu dem Sie jedes beliebige Feld hinzufügen können, das durch Vererbung als passend betrachtet wird. Es ist eine gute Vorgehensweise, Fehler zu haben, die relevante Informationen über die Wann (Verfolgung)/Wo (Schuldzuweisung)/Warum (Diagnose) Aspekte des Fehlers enthalten.
Informationen zum Erstellen eines eigenen Fehlers finden Sie unter .
finally
Der Operator verwendet eine Auswahlfunktion, die keine Argumente annimmt. Wenn dies in finally
möglich ist, wird dies nicht durch Parameterübergabe erfolgen. Du könntest es immer noch durch die Schließung schaffen, aber das ist weit entfernt von etwas, das ich empfehlen würde.
UPDATE Mit Bezug auf How can you know what ended up causing the error?
, im allgemeinen Fall kann man nicht. Genau wie bei Versprechungen werden Fehler bis zu dem Punkt verbreitet, an dem sie gefangen werden, oder sie enden damit, aus dem Versprechen/beobachtbaren Kontext heraus zu sprudeln. So sind die üblichen Techniken anwenden, die fail fast
Technik, um die produktivsten sein:
- scheitern schnell: ein Typ-System verwenden (der eigenen, indem Sie Ihre Sprache zur Verfügung gestellt oder sonst) - auf diese Weise wird sichergestellt, Sie Sie nur Werte verarbeiten von der erwartete Typ, so dass Sie diese Arten von Fehlern beseitigen können. Ich experimentierte mit a babel plugin for contracts und ich fand es ziemlich brauchbar, wenn Sie bereits babel verwenden.
- scheitern schnell: fangen Fehler so früh wie Sie können, je weiter Sie von der Quelle der Fehler sind, desto schwieriger ist es zu untersuchen.
- fail fast: Verwenden Sie Bibliotheken, die eine gute Fehlerberichterstattung über diejenigen haben, die dies nicht tun (stilles Verschlucken von Fehlern ist hier Ihr Feind). Eine gute Bibliothek bietet zu diesem Zweck einen Konfigurationsparameter.
- überprüfen Sie die Stack-Trace (mit rxjs 5, ist es einfacher geworden, dies zu tun, aber immer noch über die Interna wissen müssen)
- hinzufügen zu Code Tracing/Protokollinformationen usw.
Was den Wert werfen? –