Flutter基于Dio的频繁网络请求

使用场景
1.边输入边搜索
2.边筛选边搜索

同一数据源的异步请求到数据返回的次序及耗时:
A请求 -------------S响应 -----------ResponseA返回
B请求------S响应-------ResponseB

会导致的问题:如果发送的A和B请求返回的数据会相互覆盖,A请求的老数据就会覆盖B请求的新数据,结果展示的误差

技术
dio请求的取消

    CancelToken cancelToken = new CancelToken();
    cancelToken.cancel("cancelled");

注意事项:cancelToken的cancle行为会取消此cancelToken的所有网络请求,上述场景的cancelToken就不能使用同一个

解决方案:队列,[AcancelToken,BcancelToken]

1.A请求 [AcancelToken] ---------
2.B请求 [AcancelToken,BcancelToken]
3.-----ResponseA ------ResponseB(B覆盖A,结果:B)
3.此时A请求未返回数据就AcancelToken.cancle(),[].remove(AcancelToken)-----ResponseB(结果:B)

注意:cancelToken.cancel("cancelled");会返回Error ,类型error.type == DioErrorType.CANCEL,会影响统一出错文案的提示

如果你有更合适的处理方案,请留言指正,谢谢

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值