Subjects for @most/core
npm install most-subjectSubjects for @most/core
sh
yarn add most-subject
or
npm install --save most-subject
`API Documentation
#### create\(): Subject\
#### create\(f: (stream: Stream\) =\> Stream\): Subject\
Returns an tuple containing a
AttachSink and a Stream. AttachSink can be
used to imperatively control the events flowing through the Stream or
declaratively using attach. Optionally, a function can be applied to the Stream,
and the return value of that function will be returned as the second tuple value.
See an example
`typescript
import { create, event } from 'most-subject'
import { runEffects, propagateEventTask } from '@most/core'
import { newDefaultScheduler, currentTime } from '@most/scheduler'// Create a new
Scheduler for use in our application.
// Usually, you will want to only have one Scheduler, and it should be shared
// across your application
const scheduler = newDefaultScheduler()// Create our sink and our stream.
// NOTE: stream is the resulting value of tap(console.log, stream).
const [ sink, stream ] = create(tap(console.log))
// Pushes events into our stream.
const next = (n: number) => event(currentTime(scheduler), n, sink)
// Activate our stream.
runEffects(stream, scheduler)
// Simulate asynchronous data fetching,
// and then push values into our stream.
Promise.resolve([ 1, 2, 3 ])
.then(data => data.forEach(next))
`#### attach\(attachSink: AttachSink\, stream: Stream\): Stream\
Create circular dependencies with additional logic to help avoid memory leaks.
WARNING: There isn't any logic for breaking infinite loops.
See an example
`typescript
import { Stream } from '@most/types'
import { create, attach } from 'most-subject'
import { periodic, scan, take, runEffects } from '@most/core'
import { newDefaultScheduler } from '@most/scheduler'// Create a new Scheduler for use in our application.
// Usually, you will want to only have one Scheduler, and it should be shared
// across your application.
const scheduler = newDefaultScheduler()
const [ sink, stream ] = create()
// Listen to our stream.
// It will log 1, 2, and 3.
runEffects(tap(console.log, take(3, stream)), scheduler)
const origin = scan(x => x + 1, 0, periodic(100))
attach(origin)
`#### event\(time: Time, value: A, sink: Sink\): void
A curried function for calling
Sink.event(time, value).#### error(time: Time, error: Error, sink: Sink\): void
A curried function for calling
Sink.error(time, error).#### end(time: Time, sink: Sink\): void
A curried function for calling
Sink.end(time).`typescript
import { Sink, Stream } from '@most/types'export type Subject = [AttachSink, Stream]
``typescript
import { Sink } from '@most/types'export AttachSink extends Sink {
attach(stream: Stream): Stream
}
``