NOT ACTIVELY MAINTAINED
This project works fine but is not actively maintained.
For the new code, you might want to try the new official rx.disposables package instead.
disposables ![npm package](https://camo.githubusercontent.com/2f21f306defdd362217193edc5b0818c609614acf3d1e24a71edacd0b271d43e/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f646973706f7361626c65732e7376673f7374796c653d666c61742d737175617265)
Disposables let you safely compose resource disposal semantics.
Think DOM nodes, event handlers, socket connections.
This implementation of disposables is extracted from RxJS.
I took the liberty to tweak the code style to my liking and provide this as a standalone package.
This tiny package includes several disposables:
Disposable
ensures itsdispose
action runs only once;CompositeDisposable
ensures a group of disposables are disposed together;SerialDisposable
switches underlying disposables on the fly and disposes them.
The API is mostly the same as RxJS except stricter in a few places.
It does not strive for 100% API compatibility with RxJS, but generally behavior is the same.
It's best if you consult the source and tests, as classes are small and few.
Usage
import { Disposable, CompositeDisposable, SerialDisposable } from 'disposables';
// or you can import just the ones you need to keep it even tinier
// import SerialDisposable from 'disposables/modules/SerialDisposable';
function attachHandlers(node) {
let someHandler = ...;
node.addEventHandler(someHandler);
// use Disposable to guarantee single execution
return new Disposable(() => {
node.removeEventHandler(someHandler);
});
}
// CompositeDisposable lets you compose several disposables...
let nodes = ...;
let compositeDisp = new CompositeDisposable(nodes.map(attachHandlers));
// and more later...
let moreNodes = ...
moreNodes.map(attachHandlers).forEach(d => compositeDisp.add(d));
// and dispose them at once!
function goodbye() {
compositeDisp.dispose();
}
// ... or replace with a bunch of new ones ...
let serialDisp = new SerialDisposable();
serialDisp.setDisposable(compositeDisp);
function replaceNodes(newNodes) {
let nextCompositeDisp = new CompositeDisposable(newNodes.map(attachHandlers));
// release all the previous disposables:
serialDisp.setDisposable(nextCompositeDisp);
}
// with a guarantee of each dispose() called only once.
License
Like the original RxJS code, it is licensed under Apache 2.0.