An open API service indexing awesome lists of open source software.

https://github.com/plugfox/plugfox_transformers

Сontains a set of useful stream transformers
https://github.com/plugfox/plugfox_transformers

dart dart-library dart-package dart-web dart2 dartlang package stream transformer

Last synced: 7 months ago
JSON representation

Сontains a set of useful stream transformers

Awesome Lists containing this project

README

          

# plugfox_transformers

[![chatroom icon](https://patrolavia.github.io/telegram-badge/chat.png)](https://t.me/PlugFox)
[![Pub](https://img.shields.io/pub/v/plugfox_transformers.svg)](https://pub.dartlang.org/packages/plugfox_transformers)

## About

Сontains a set of useful stream transformers
+ `Simultaneous` (Serves for simultaneous parallel tasks)

## Simultaneous

Serves for simultaneous parallel tasks

Executes simultaneously `[maxNumberOfProcesses]` generators `[convert]`
transforming each `[Event]` into a Stream of `[State]`.
The resulting stream is returned from the `[Stream.transform]` method.

If `[maxNumberOfProcesses]` is set to 0 or less, then all
incoming events processed instantly.

If `[maxNumberOfProcesses]` is set to 1, then the
behavior is almost identical .asyncExpand method.

If `[maxNumberOfProcesses]` is set to 2 or more, then this sets the number
simultaneously performed tasks and each subsequent event begins to be processed
as soon as one of the previous ones is finished.

The transformer breaks the sequence of events in the stream.

### Example usage:

```dart
Stream myGenerator(int event) async* {
String state;

state = await Future.delayed(
const Duration(milliseconds: 250)
, () => '$event + 2 = ${event + 2}');
yield state;

state = await Future.delayed(
const Duration(milliseconds: 500)
, () => '$event * 2 = ${event * 2}');
yield state;

state = await Future.delayed(
const Duration(milliseconds: 750)
, () => '$event ^ 2 = ${event * event}');
yield state;
}

Stream.fromIterable(const [1, 2, 3, 4, 5, 6, 7])
.transform(Simultaneous(myGenerator, maxNumberOfProcesses: 2))
.forEach(print);
```

### Override `bloc` package behavior:

```dart
@override
Stream> transformEvents(
Stream events,
Stream> Function(Event) next) =>
events.transform>(
Simultaneous>(next, maxNumberOfProcesses: 0)
);
```


## Changelog

Refer to the [Changelog](https://github.com/plugfox/plugfox_transformers/blob/master/CHANGELOG.md) to get all release notes.