TransferConfiguration：定制数据传输
============================

#### 场景介绍

在远场通信框架中，开发者们利用 TransferConfiguration，可以对 HTTP请求期间的数据传输行为进行精细化管理和定制化调整。TransferConfiguration提供了自动重定向策略、超时时间设定等关键功能的配置选项。通过理解和灵活运用这些属性，开发者可以根据项目需求，实现数据传输策略的个性化定制，从而获得更高效、更可靠的数据传输体验。

#### 约束与限制

定制数据传输能力支持Phone、2in1、Tablet、Wearable设备。并且从5.1.1(19)开始，新增支持TV设备；从6.1.0(23)开始，新增支持Car设备。

#### 使用示例

下面会介绍超时重试场景下TransferConfiguration如何去使用。

#### \[h2\]超时重试

1.  导入需要的模块。
    
    import { rcp } from '@kit.RemoteCommunicationKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    
2.  定义会话配置，创建会话。
    
    // 定义会话配置
    const sessionConfig: rcp.SessionConfiguration = {
      requestConfiguration: {
        transfer: {
          timeout: {
            connectMs: 3000,
            transferMs: 6000
          }
        }
      }
    };
    
    // 创建会话
    const session = rcp.createSession(sessionConfig);
    
3.  定义异步函数，利用递归实现重试，如果请求失败，会在指定的重试次数内进行重试。
    
    async function retryRequest(url: string, retryCount: number, attempt: number): Promise<rcp.Response> {
      try {
        const response = await session.get(url);
        return Promise.resolve(response);
      } catch (e) {
        if (e.code === 1007900006 || e.code === 1007900005 || e.code === 1007900007 || e.code === 1007900035) {
          if (attempt < retryCount) {
            return retryRequest(url, retryCount, attempt + 1);
          } else {
            return Promise.reject(e);
          }
        } else {
          return Promise.reject(e);
        }
      }
    }
    
4.  调用retryRequest方法，实现网络请求的重试逻辑。
    
    // 定义URL
    const URL = 'https://www.example.com'
    
    // 定义重试次数，值为3
    const retryCount = 3
    
    // 定义当前尝试次数，初始值为1
    const attempt = 1
    
    // 调用retryRequest函数进行网络请求，参数为URL、重试次数和当前尝试次数，将retryRequest函数返回的结果存储在response变量中
    const response = retryRequest(URL, retryCount, attempt);
    // 使用then方法处理response的成功返回情况
    response.then((res) => {
      console.info(\`retryRequest result: ${res.statusCode.toString()}\`);
    }).catch((err: BusinessError) => {
      console.error(\`retryRequest error code: ${err.code}, err data: ${err.data}\`);
    })