Skip to content

Instantly share code, notes, and snippets.

@ypresto
Last active August 29, 2015 14:27
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 ypresto/03d17be6c4db5171703d to your computer and use it in GitHub Desktop.
Save ypresto/03d17be6c4db5171703d to your computer and use it in GitHub Desktop.
Translate brook promise and channel into RxJS.
Namespace('brook.rxjsbridge')
.use('brook promise')
.define(function(ns) {
'use strict';
var observableFromPromise = function(promise, value) {
return Rx.Observable.create(function(observer) {
var called = false;
var throwIfCalled = function() {
if (called) {
throw new Error('promise resolved twice.');
}
called = true;
};
var observerPromise = ns.promise(function(n, v) {
throwIfCalled();
if (observer) {
observer.onNext(v);
observer.onComplete();
}
n(v);
});
observerPromise.setErrorHandler(function(e) {
throwIfCalled();
if (observer) {
observer.onError(e);
}
});
observerPromise.run(value);
return function() {
observer = null;
};
});
};
var observableFromChannel = function(channel) {
return Rx.Observable.create(function(observer) {
var observerPromise = ns.promise(function(n, v) {
observer.onNext(v);
n(v);
});
channel.observe(observerPromise);
return function() {
channel.stopObserving(observerPromise);
};
});
};
ns.provide({
observableFromPromise: observableFromPromise,
observableFromChannel: observableFromChannel
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment