【问题标题】:Dio Cancel current running API before starting a new API requestDio 在开始新的 API 请求之前取消当前正在运行的 API
【发布时间】:2021-10-23 12:14:45
【问题描述】:

我正在使用 DIO 包进行 API 请求,但问题是当我请求另一个 API 时,第一个 API 仍在进行中。

它不会取消第一个请求。这两个 API 同时运行,这在我的应用场景中并不理想。

class DioClient {

 static BaseOptions options = BaseOptions(baseUrl: baseUrl);

   Dio _dio = Dio(options);

   Future<dynamic> postFormData(
      {dynamic data, String url, dynamic header}) async {
    final data1 = data;
    var formData = FormData.fromMap(data1);

    try {
      var response = await _dio.post(url,
          options: Options(headers: header), data: formData);

      return response.data;
    } catch (e) {
      throw e;
    }}}

【问题讨论】:

    标签: flutter api dio


    【解决方案1】:

    如果要取消 API 请求调用,则需要使用 DIO 提供的cancel token

    当您进行其他 API 调用使用该取消令牌取消 API 请求时,您需要在 dio 请求中传递取消令牌

    这里是代码

        class DioClient {
    
      static BaseOptions options = BaseOptions(baseUrl: baseUrl);
     
     //Here is line you need
     CancelToken cancelToken=CancelToken();
     Dio _dio = Dio(options);
    
      Future<dynamic> postFormData(
      {dynamic data, String url, dynamic header}) async {
    final data1 = data;
    var formData = FormData.fromMap(data1);
    
    try {
      //pass cancel token here
      var response = await _dio.post(url,
          options: Options(headers: header), data: formData,cancelToken: canceToken);
    
      return response.data;
    } catch (e) {
      throw e;
    }}}
    

    当您首先调用另一个 API 时,使用该 cancelToken 来取消 API 请求,您取消之前的请求。

    cancelToken.cancel();
    

    享受吧!

    【讨论】:

    • 我应该在哪里使用 cancelToken.cancel(); @Jigar
    • @Avnishkumar 当您进行另一个 API 请求调用时,您需要取消前一个。
    • 我将取消令牌放在全局类中,并在开始新请求之前取消令牌 Token().homescreenToken.cancel(); final _result = await DioClient().postFormData(header: { "Authorization": globals.token, "content-type": "application/json", }, data: data, url: url, cancelToken: Token().homescreenToken );
    • 你需要使用 await Token().homescreenToken.cancel(); cancel() 是未来。
    • Cancel() 不是 Future 而它的返回类型是 void,所以我不能使用 await
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多