Skip to content

Commit 96b8dcc

Browse files
authored
Merge pull request #84 from zenparsing/receiver-errors
Bind subscription observer methods
2 parents 6e78745 + f8bf6a4 commit 96b8dcc

File tree

5 files changed

+43
-16
lines changed

5 files changed

+43
-16
lines changed

src/Observable.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,14 @@ class Subscription {
163163
this._queue = undefined;
164164
this._state = 'initializing';
165165

166-
let subscriptionObserver = new SubscriptionObserver(this);
166+
let self = this;
167+
168+
let subscriptionObserver = {
169+
get closed() { return self._state === 'closed' },
170+
next(value) { onNotify(self, 'next', value) },
171+
error(value) { onNotify(self, 'error', value) },
172+
complete() { onNotify(self, 'complete') },
173+
};
167174

168175
try {
169176
this._cleanup = subscriber.call(undefined, subscriptionObserver);
@@ -187,14 +194,6 @@ class Subscription {
187194
}
188195
}
189196

190-
class SubscriptionObserver {
191-
constructor(subscription) { this._subscription = subscription }
192-
get closed() { return this._subscription._state === 'closed' }
193-
next(value) { onNotify(this._subscription, 'next', value) }
194-
error(value) { onNotify(this._subscription, 'error', value) }
195-
complete() { onNotify(this._subscription, 'complete') }
196-
}
197-
198197
export class Observable {
199198

200199
constructor(subscriber) {

test/observer-closed.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ describe('observer.closed', () => {
55
it('is a getter on SubscriptionObserver.prototype', () => {
66
let observer;
77
new Observable(x => { observer = x }).subscribe();
8-
testMethodProperty(Object.getPrototypeOf(observer), 'closed', {
8+
testMethodProperty(observer, 'closed', {
99
get: true,
1010
configurable: true,
1111
writable: true,
12+
enumerable: true,
1213
length: 1
1314
});
1415
});

test/observer-complete.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,24 @@ describe('observer.complete', () => {
99
return observer;
1010
}
1111

12-
it('is a method of SubscriptionObserver', () => {
12+
it('is a method', () => {
1313
let observer = getObserver();
14-
testMethodProperty(Object.getPrototypeOf(observer), 'complete', {
14+
testMethodProperty(observer, 'complete', {
1515
configurable: true,
1616
writable: true,
17+
enumerable: true,
1718
length: 0,
1819
});
1920
});
2021

22+
it('is bound', () => {
23+
let done = false;
24+
let observer = getObserver({ complete() { done = true } });
25+
let { complete } = observer;
26+
complete();
27+
assert.ok(done);
28+
});
29+
2130
it('does not forward arguments', () => {
2231
let args;
2332
let observer = getObserver({ complete(...a) { args = a } });

test/observer-error.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,24 @@ describe('observer.error', () => {
99
return observer;
1010
}
1111

12-
it('is a method of SubscriptionObserver', () => {
12+
it('is a method', () => {
1313
let observer = getObserver();
14-
testMethodProperty(Object.getPrototypeOf(observer), 'error', {
14+
testMethodProperty(observer, 'error', {
1515
configurable: true,
1616
writable: true,
17+
enumerable: true,
1718
length: 1,
1819
});
1920
});
2021

22+
it('is bound', () => {
23+
let err;
24+
let observer = getObserver({ error(e) { err = e } });
25+
let { error } = observer;
26+
error('err');
27+
assert.equal(err, 'err');
28+
});
29+
2130
it('forwards the argument', () => {
2231
let args;
2332
let observer = getObserver({ error(...a) { args = a } });

test/observer-next.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,24 @@ describe('observer.next', () => {
99
return observer;
1010
}
1111

12-
it('is a method of SubscriptionObserver', () => {
12+
it('is a method', () => {
1313
let observer = getObserver();
14-
testMethodProperty(Object.getPrototypeOf(observer), 'next', {
14+
testMethodProperty(observer, 'next', {
1515
configurable: true,
1616
writable: true,
17+
enumerable: true,
1718
length: 1,
1819
});
1920
});
2021

22+
it('is bound', () => {
23+
let value;
24+
let observer = getObserver({ next(v) { value = v } });
25+
let { next } = observer;
26+
next(123);
27+
assert.equal(value, 123);
28+
});
29+
2130
it('forwards the first argument', () => {
2231
let args;
2332
let observer = getObserver({ next(...a) { args = a } });

0 commit comments

Comments
 (0)