Skip to content

Instantly share code, notes, and snippets.

@cwharris
Last active August 29, 2015 14:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cwharris/8d1df4f05574f4dae5a3 to your computer and use it in GitHub Desktop.
Save cwharris/8d1df4f05574f4dae5a3 to your computer and use it in GitHub Desktop.
Observable.tagError: Basically to help manually debug JavaScript applications by using locator tags. The locator tags are prepended to the error as it travel to the consumer.
Rx.Observable
.concat(
[
Rx.Observable.return('{ "value": 0 }'),
Rx.Observable.return('{ "value": 5 }'),
Rx.Observable.return("{")
]
)
.tagError('Source')
.tagError('ParseJSON', function (source) {
return source.map(function (s) { return JSON.parse(s); });
})
.map(function (obj) { return 2 / obj.value; })
.subscribe(
console.log.bind(console, ' onNext ->'),
console.log.bind(console, ' onError ->'),
console.log.bind(console, 'onCompleted ->')
);
Rx.Observable
.concat(
[
Rx.Observable.return('{ "value": 0 }'),
Rx.Observable.return('{ "value": 5 }'),
Rx.Observable.return("{")
]
)
.tagError('Source')
.map(function (s) { return JSON.parse(s); })
.tagError('ParseJSON')
.map(function (obj) { return 2 / obj.value; })
.subscribe(
console.log.bind(console, ' onNext ->'),
console.log.bind(console, ' onError ->'),
console.log.bind(console, 'onCompleted ->')
);
function Error (message) {
this.message = message;
this.tags = [];
}
Rx.Observable.prototype.tagError = function (tag, selector) {
return selector
? selector(this).tagError(tag)
: this.catchException(function (error) {
var isError = error instanceof Error;
if (!isError) {
error = new Error(error);
}
error.tags.unshift(tag);
return Rx.Observable.throw(error);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment