Skip to content

Commit e1ffd3d

Browse files
authored
Let firstOrNull extension method wait for cancel to complete. (dart-archive/async#196)
1 parent fe8ec38 commit e1ffd3d

File tree

1 file changed

+7
-11
lines changed

1 file changed

+7
-11
lines changed

pkgs/async/lib/src/stream_extensions.dart

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,15 @@ extension StreamExtensions<T> on Stream<T> {
4343
/// completed with `null`.
4444
Future<T?> get firstOrNull {
4545
var completer = Completer<T?>.sync();
46-
final subscription = listen(null);
47-
subscription
48-
..onData((event) {
49-
subscription.cancel();
46+
final subscription = listen(null,
47+
onError: completer.completeError,
48+
onDone: completer.complete,
49+
cancelOnError: true);
50+
subscription.onData((event) {
51+
subscription.cancel().whenComplete(() {
5052
completer.complete(event);
51-
})
52-
..onError((Object error, StackTrace stackTrace) {
53-
subscription.cancel();
54-
completer.completeError(error, stackTrace);
55-
})
56-
..onDone(() {
57-
completer.complete(null);
5853
});
54+
});
5955
return completer.future;
6056
}
6157
}

0 commit comments

Comments
 (0)