我正在开发一个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();
}