Iterable Observer
Observable Proposal implement based on Async Generator (ES 2018) & TypeScript
Usage
Basic
import { Observable } from 'iterable-observer';
var count = 0,
list = [];
const observable = new Observable(({ next, complete }) => {
const timer = setInterval(
() => (++count < 5 ? next(count) : complete(count)),
0
);
return () => clearInterval(timer);
});
(async () => {
for await (const item of observable) list.push(item);
console.log(list); // [1, 2, 3, 4, 5]
})();
Enhance Run-time platforms
import { Observable } from 'iterable-observer';
const reader = new FileReader(),
{
files: [file]
} = document.querySelector('input[type="file"]');
reader.readAsBlob(file);
(async () => {
for await (const { loaded } of Observable.fromEvent(reader, 'progress'))
console.log((loaded / file.size) * 100 + '%');
})();
Concurrent Task to Serial Queue
import { createQueue } from 'iterable-observer';
import Koa from 'koa';
import BodyParser from 'koa-bodyparser';
const { process, observable } = createQueue(),
app = new Koa();
(async () => {
for await (const {
defer: { resolve },
data
} of observable)
resolve(JSON.stringify(data));
})();
app.use(BodyParser)
.use(async context => (context.body = await process(context.request.body)))
.listen(80);