gpt4 book ai didi

flutter - 如何在RxDart中重试流?

转载 作者:行者123 更新时间:2023-12-03 03:16:23 27 4
gpt4 key购买 nike

我是Dart和Flutter的新手,我面临一个障碍。

我正在开发一个 flutter 的应用程序,它使用网络调用, token 身份验证等。我使用Dio和RxDart。问题是,默认情况下,我需要重试每个api调用5次,直到我从服务器获得正确的响应为止(例如,当我调用 token 服务器时,第一次调用响应202,第二次或第三次调用200)。如何重试通话?

这是我的GET方法:

  Future _get(String url, {Map<String, dynamic> headers}) async {
var response = await dio.get(url, options:
new Options(headers: headers));
return response.data;
}

和返回Future Observable的方法:
 Observable get2(String url, {Map<String, dynamic> headers}) {
return Observable.retry(_sourceStream(url, headers: headers) , 5);

}
 Stream Function() _sourceStream(String url, {Map<String, dynamic> headers}) {
return () => Observable.fromFuture(_get(url, headers: headers));

}

我知道RxDart中有一个retryWhen工厂方法,但是我无法在我的方法中以正确的方式使用它。有人可以帮忙吗?

最佳答案

使用 Observable.retry :

Observable.retry(() => Observable.fromFuture(_get(url, headers: headers)), 5)

使用 RetryWhenStream :
    int retries = 0;
RetryWhenStream(
() => Observable.fromFuture(_get(url, headers: headers))),
(e, s) {
retries+=1;
// if there is more than 5 retries, throw an error
if (retries <= 5) return Observable.just('Lets retry again');
return Observable.error(e);
},
);

当有人开始收听这些流时,它将开始重试5次(如果有错误)

关于flutter - 如何在RxDart中重试流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58197726/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com