如果流没有在持续时间内完成,Dart Streams是否可以发出值



我正在开发一个Flutter应用程序,使用blocs来控制视图的状态。我想调用和外部API,如果它快速响应,立即通过yield显示结果状态。然而,如果调用花费的时间超过5秒,我希望生成一个状态,指示响应需要一段时间,同时仍在等待API返回。如何使用Dart Streams,无论是原生还是RxDart?

这可以使用Stream.timeout来完成。谢谢@pskink!

Stream<String> delayedCall() async* {
yield 'Waiting';
final apiCall =  Future.delayed(Duration(seconds: 5)).then((_) => 'Complete');
yield* Stream.fromFuture(apiCall).timeout(
Duration(seconds: 3), 
onTimeout: (eventSink) => eventSink.add('Still waiting'),
);
}

void main() {
final stream = delayedCall();
stream.listen(print);
}

所有Futureshave都有一个延迟的超时,例如

try{
var timer = Timer(Duration(seconds: 3), () {
yield SlowAPI();
});
YourFeature.whenComplete((){
timer.cancel();
});
yield Success();
}catch(e){
yield Error();
}

相关内容

最新更新