Skip to content

Instantly share code, notes, and snippets.

View cwharris's full-sized avatar
🖖

Christopher Harris cwharris

🖖
View GitHub Profile
// combineLatest(obs1, obs2, selector)
// combineLatest([obs1, obs2], selector)
observableProto.combineLatest = function () {
var args = slice.call(arguments);
// (args[0] instanceof Array ? args[0] : args).unshift(this);
if (args[0] instanceof Array) {
args[0].unshift(this);
} else {
args.unshift(this);
@cwharris
cwharris / combineTemplate.js
Last active December 12, 2015 01:09
Rx.Observable.combineTemplate takes an object with key/value pairs of observables, and returns an observable which yields objects with key/value pairs of values which have been provided internally using Rx.Observable.combineLatest.
Rx.Observable.combineTemplate = function(sources) {
var keys = [];
var values = [];
for (var key in sources) {
keys.push(key);
values.push(sources[key]);
}
static void Main(string[] args)
{
var items = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
.Select(x =>
{
Console.WriteLine(x);
return x;
})
.Select(x => Observable.Range(x, 1))
.Concat()
@cwharris
cwharris / flatMap.js
Created May 2, 2013 18:20
OH LOOK IT IS GOOD FRIEND FLAT MAP COME TO SAVE US ALL FROM DOOM.
function flatMap (array, func) {
return Array.prototype.concat.apply([], array.map(func));
};
@cwharris
cwharris / Program.cs
Last active December 16, 2015 22:49
Reactive Primitives
using System;
using System.Reactive.Linq;
using System.Reactive.Subjects;
namespace ReactivePrimitives
{
class Program
{
static void Main(string[] args)
{
Rx.Observable.prototype.obsFilter = function (func) {
var self = this;
return Rx.Observable.createWithDisposable(function (o) {
self.subscribe(function (source) {
var subject = null;
@cwharris
cwharris / rxdd.js
Last active December 17, 2015 04:38
Stick THIS in your browser and run it.
Rx.Observable.select = function (element, source) {
return source.select(function (value) {
return {
element: element,
value: value
};
});
};
@cwharris
cwharris / autoPublish-1.js
Last active December 22, 2015 02:59
autoPublish
Rx.Observable.prototype.autoPublish = function () {
var source = this.publish(),
subscribers = 0,
connection = null,
dispose = function () {
if (--subscribers === 0) { connection.dispose(); }
};
return Rx.Observable.createWithDisposable(function (o) {
if (++subscribers === 1) { connection = source.connect(); }
@cwharris
cwharris / join-pattern.js
Created September 2, 2013 20:18
What should this be doing exactly?
var Rx = require('rx');
var a = new Rx.Subject();
var b = new Rx.Subject();
var c = new Rx.Subject();
var resA = Rx.Observable
.when(
a.and(b)
.then(function (a, b) { return a + b; })
@cwharris
cwharris / example.js
Created September 2, 2013 23:14
Rx.Observable.latestOn
var model = new Rx.Subject();
var click = new Rx.Subject();
model.latestOn(click, function (model, e) { return [model, e]; })
.subscribe(function (x) {
console.log(x);
});