Created
August 27, 2014 21:08
-
-
Save mattpodwysocki/a5bbcba1567bff32fc77 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Converts the observable sequence to a WeakMap if it exists. | |
* @param {Function} keySelector A function which produces the key for the WeakMap | |
* @param {Function} [elementSelector] An optional function which produces the element for the WeakMap. If not present, defaults to the value from the observable sequence. | |
* @returns {Observable} An observable sequence with a single value of a WeakMap containing the values from the observable sequence. | |
*/ | |
function toMap(source, type, keySelector, elementSelector) { | |
return new AnonymousObservable(function (observer) { | |
var m = new type(); | |
return self.subscribe( | |
function (x) { | |
var key; | |
try { | |
key = keySelector(x); | |
} catch (e) { | |
observer.onError(e); | |
return; | |
} | |
var element = x; | |
if (elementSelector) { | |
try { | |
element = elementSelector(x); | |
} catch (e) { | |
observer.onError(e); | |
return; | |
} | |
} | |
m.set(key, element); | |
}, | |
observer.onError.bind(observer), | |
function () { | |
observer.onNext(m); | |
observer.onCompleted(); | |
}) | |
}); | |
} | |
if (!!window.Map) { | |
Rx.Observable.prototype.toMap = function (keySelector, elementSelector) { | |
return toMap(this, window.Map, keySelector, elementSelector); | |
} | |
} | |
if (!!window.WeakMap) { | |
Rx.Observable.prototype.toWeakMap = function (keySelector, elementSelector) { | |
return toMap(this, window.WeakMap, keySelector, elementSelector); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment