This repository has been archived on 2020-09-01. You can view files and clone it, but cannot push or open issues or pull requests.
reactimal/src/subscribable.js

31 lines
594 B
JavaScript

import { call } from './util.js';
export const subscribable = () => {
const subscriptions = [];
return {
subscribe(fn) {
subscriptions.push(fn);
return () => {
const idx = subscriptions.indexOf(fn);
if (idx !== -1) {
subscriptions.splice(idx, 1);
}
return subscriptions.length;
};
},
unsubscribeAll() {
subscriptions.splice(0, Infinity);
},
_fire(val) {
return subscriptions.map(s => s(val)).forEach(call);
},
_forEachSubscription(fn) {
subscriptions.forEach(fn);
},
_hasSubscribers() {
return subscriptions.length > 0;
}
};
}