onRecvValue<T> method
Race a channel receiver - only handle successful messages.
Waits for successful values from the channel, ignoring errors. Use when you only care about valid data and want other branches to handle error conditions.
Example:
await XSelect.run<String>((s) => s
..onRecvValue(userInputs, (input) => 'User: $input')
..onRecvValue(apiResponses, (response) => 'API: $response')
..onRecvError(errorChannel, (error) => 'Error: $error')
..onTimeout(Duration(seconds: 10), () => 'No activity')
);
See also:
- onRecv - Parent
- onRecvError - Only handle error result
Implementation
SelectBuilder<R> onRecvValue<T>(Receiver<T> rx, FutureOr<R> Function(T) body,
{Object? tag,
FutureOr<R> Function(RecvError e)? onError,
FutureOr<R> Function()? onDisconnected,
bool Function()? if_}) {
return onRecv<T>(rx, (result) {
if (result.hasValue) {
return body(result.value);
}
if (result.isDisconnected && onDisconnected != null) {
return onDisconnected();
}
if (result.hasError && onError != null) {
return onError(result.error);
}
return Future<R>.error(StateError('Unexpected RecvResult: $result'));
}, tag: tag, if_: if_ ?? () => !rx.isDisconnected);
}