如果在 Flutter 中失败,Future 可以在内部重试 http 请求吗?

标记

我正在使用以下代码成功轮询 mysite 以获取 JSON 数据并返回该数据。如果请求失败,那么它也成功返回错误消息return Result.error(title:"No connection",msg:"Status code not 200", errorcode:0);

我想要发生的是让应用程序在返回错误消息之前重试请求 3 次。

基本上有一些迭代次数的未来调用本身。

我确实尝试创建一个外部函数,该函数将从外部 catch 调用,然后依次调用 getJSONfromTheSite 函数第二次和第三次,但问题是您将从 Future 获得非空返回,所以该应用程序不会接受这种方法

还有另一种方法吗?

          Future<Result> getJSONfromTheSite(String call) async {
            debugPrint('Network Attempt by getJSONfromTheSite');
            try {

              final response = await http.get(Uri.parse('http://www.thesite.com/'));

              if (response.statusCode == 200) {
                return Result<AppData>.success(AppData.fromRawJson(response.body));
              } else {
                //return Result.error("Error","Status code not 200", 1);
                return Result.error(title:"Error",msg:"Status code not 200", errorcode:1);
              }
            } catch (error) {
                return Result.error(title:"No connection",msg:"Status code not 200", errorcode:0);
            }
          }
纳尔逊·蒂亚戈

在里面catch()你可以计算你重试了多少次,如果计数器小于三,你返回相同的getJSONfromTheSite()函数,但使用总和计数器。如果连接一直失败try{}并且计数器大于三,它将返回错误。

Future<Result> getJSONfromTheSite(String call, {counter = 0}) async {
            debugPrint('Network Attempt by getJSONfromTheSite');
            try {
              String? body = await tryGet();
              if (body != null) {
                return Result<AppData>.success(AppData.fromRawJson(response.body));
              } else {
                //return Result.error("Error","Status code not 200", 1);
                return Result.error(title:"Error",msg:"Status code not 200", errorcode:1);
              }
            } catch (error) {
                if(counter < 3) {  
                  counter += 1;
                  return getJSONfromTheSite(call, counter: counter);
                } else {
                  return Result.error(title:"No connection",msg:"Status code not 200", errorcode:0);
                }
            }
          }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果在Visual Studio和C#中,可以在内联中设置断点吗?

如果在Swift中可选的向下转换失败,您可以继续循环吗?

如果在主板规范中仅提及 Windows 支持,我可以安装 Linux 吗?

如果在viewmodel模式中显示进度指示器,可以吗?

Terraform - 如果在 for_each 中。我可以过滤 for_each 吗?

如果在Java中响应时间超过n秒,请重新运行http post请求?

从意图更改视图内容,如果在内部类中未抛出该内容

如果在玩笑中失败,如何重试expect语句

把手#如果在内部#forEach

如果在内部使用link_to

如果在“内部” VM中运行,我们会在Chapel中看到预期的加速吗?

如果在内部导出,则在定义函数之前调用它是可以的

如果在类扩展中重新定义了属性,则可以更改其内存管理吗?

K&R 1.5.4,如果在此代码示例中,任何人都可以解释else吗?

如果在内部类中访问,则在方法中定义的内部类要求在该方法中声明的变量是最终变量。

如何通过RXJS在内部HTTP中取消待处理的请求?

git:如果http请求失败,请重试

如果在Java中 如果在C ++中

如果在这段代码中分配失败,内存会泄漏吗?

如果在不使用验证器的情况下在字段中传递了None,我可以在pydantic中设置默认值吗?

在Windows中,如果在文件名(或内容)中键入日期戳YYMMDD,以后可以在特定YYDDMM范围内搜索结果吗?如何?

如果在Controller方法中请求参数不可用,则抛出Spring Bad Bad Request

如果在DJango中需要login_required,如何获取请求

如果在react-admin中查询字段的长度很短,如何防止获取请求的发送

如果在多线程微服务可以用吗?

如果在锁定互斥锁之前将其解锁,可以吗?

通常,如果在else下使用goto语句可以循环吗?

如果在 cmd 中运行,这在 python 中可能吗?

如果在响应代码中获得 307,如何使 scrapy 重试 URL?