Dio 在开始新的 API 请求之前取消当前正在运行的 API

问题描述 投票:0回答:1

我正在使用 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个回答
13
投票

如果您想取消API请求调用,则需要使用DIO提供的取消令牌

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

这是代码

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: cancelToken,
      );
      return response.data;
    } catch (e) {
      throw e;
    }
  }
}

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

cancelToken.cancel();

享受吧!

© www.soinside.com 2019 - 2024. All rights reserved.