# zen-observable
**Repository Path**: mirrors_kuitos/zen-observable
## Basic Information
- **Project Name**: zen-observable
- **Description**: An Implementation of ES Observables
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-10-22
- **Last Updated**: 2026-03-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# zen-observable
An implementation of [ES Observables](https://github.com/zenparsing/es-observable).
Requires ES6 Promises or a Promise polyfill.
## Install
```sh
npm install zen-observable
```
## Download
- [zen-observable.js](https://raw.githubusercontent.com/zenparsing/zen-observable/master/zen-observable.js)
## Usage
Node:
```js
var Observable = require("zen-observable");
Observable.of(1, 2, 3).subscribe(x => console.log(x));
```
Browser:
```html
```
ES Modules:
```js
import Observable from "zen-observable";
Observable.of(1, 2, 3).subscribe(x => console.log(x));
```
## API
### new Observable ( subscribe )
```js
let observable = new Observable(observer => {
// Emit a single value after 1 second
let timer = setTimeout(_=> {
observer.next("hello");
observer.complete();
}, 1000);
// On unsubscription, cancel the timer
return _=> clearTimeout(timer);
});
```
Creates a new Observable object using the specified subscriber function. The subscriber function is called whenever the `subscribe` method of the observable object is invoked. The subscriber function is passed an *observer* object which has the following methods:
- `next(value)` Sends the next value in the sequence.
- `error(exception)` Terminates the sequence with an exception.
- `complete()` Terminates the sequence successfully.
The subscriber function can optionally return either a cleanup function or a subscription object. If it returns a cleanup function, that function will be called when the subscription has closed. If it returns a subscription object, then the subscription's `unsubscribe` method will be invoked when the subscription has closed.
### Observable.of ( ...items )
```js
// Logs 1, 2, 3
Observable.of(1, 2, 3).subscribe(x => {
console.log(x);
});
```
Returns an observable which will emit each supplied argument.
### Observable.from ( value )
```js
let list = [1, 2, 3];
// Iterate over an object
Observable.from(list).subscribe(x => {
console.log(x);
});
```
```js
// Convert something "observable" to an Observable instance
Observable.from(otherObservable).subscribe(x => {
console.log(x);
});
```
Converts `value` to an Observable.
- If `value` is an implementation of ES Observables, then it is converted to an instance of Observable as defined by this library.
- Otherwise, it is converted to an Observable which synchronously iterates over `value`.
### observable.subscribe ( observer )
```js
let subscription = observable.subscribe({
next(x) { console.log(x) },
error(err) { console.log(`Finished with error: ${ err }`) },
complete() { console.log("Finished") }
})
```
Subscribes to the observable. The `observer` argument must be an object. It may have any of the following methods:
- `start(subscription)` Receives the subscription object during initialization.
- `next(value)` Receives the next value of the sequence.
- `error(exception)` Receives the terminating error of the sequence.
- `complete()` Called when the stream has completed successfully.
The subscription object can be used to cancel the stream.
```js
// Stop receiving data from the stream
subscription.unsubscribe();
```
## Extended API
*The following methods are not yet defined by the ES Observable specification.*
### observable.forEach ( callback )
```js
observable.forEach(x => {
console.log(`Received value: ${ x }`);
}).then(_=> {
console.log("Finished successfully")
}).catch(err => {
console.log(`Finished with error: ${ err }`);
})
```
Subscribes to the observable and returns a Promise for the completion value of the stream. The `callback` argument is called once for each value in the stream.
### observable.filter ( callback )
```js
Observable.of(1, 2, 3).filter(value => {
return value > 2;
}).subscribe(value => {
console.log(value);
});
// 3
```
Returns a new Observable that emits all values which pass the test implemented by the `callback` argument.
### observable.map ( callback )
Returns a new Observable that emits the results of calling the `callback` argument for every value in the stream.
```js
Observable.of(1, 2, 3).map(value => {
return value * 2;
}).subscribe(value => {
console.log(value);
});
// 2
// 4
// 6
```
### observable.reduce ( callback [, initialValue] )
```js
Observable.of(0, 1, 2, 3, 4).reduce((previousValue, currentValue) => {
return previousValue + currentValue;
}).subscribe(result => {
console.log(result);
});
// 10
```
Returns a new Observable that applies a function against an accumulator and each value of the stream to reduce it to a single value.
### observable.flatMap ( callback )
Returns a new Observable that emits the values from each Observable that is returned from the `callback` argument.
```js
Observable.of("Hello", "Goodbye").flatMap(value => {
return Observable.of(value + " Earth", value + " Mars");
}).subscribe(value => {
console.log(value);
});
// "Hello Earth"
// "Hello Mars"
// "Goodbye Earth"
// "Goodbye Mars"
```