every方法
- bool test(
- T element
检查此流提供的所有元素是否都被test
接受。
对这一流的每个元素调用test
。如果返回值为false
,返回的future将完成,并停止处理。
如果这一流结束而没有找到被test
拒绝的元素,返回的future将以true
结束。
如果这一流发出错误,或者调用test
时抛出异常,返回的future将使用该错误完成,并停止处理。
示例
final result =
await Stream.periodic(const Duration(seconds: 1), (count) => count)
.take(15)
.every((x) => x <= 5);
print(result); // false
实现
Future<bool> every(bool test(T element)) {
_Future<bool> future = new _Future<bool>();
StreamSubscription<T> subscription =
this.listen(null, onError: future._completeError, onDone: () {
future._complete(true);
}, cancelOnError: true);
subscription.onData((T element) {
_runUserCode(() => test(element), (bool isMatch) {
if (!isMatch) {
_cancelAndValue(subscription, future, false);
}
}, _cancelAndErrorClosure(subscription, future));
});
return future;
}