fetch 函数
fetch() 是用于发起 HTTP/HTTPS 网络请求的通用方法,返回一个表示响应 (Response) 的 Promise。
它在 Scripting 中的行为与浏览器标准 Fetch API 基本一致,但进行了原生增强以更好地支持 iOS 本地运行环境(包括文件请求、Data 对象、FormData 上传、可控重定向、信号中止与调试标签等)。
方法定义
参数说明
1. url: string
要请求的资源地址。 可以是:
- 网络地址(例如
"https://api.example.com/data") - 本地文件 URL(例如
"file:///var/mobile/Containers/Data/Application/...")
2. init?: RequestInit
可选配置对象,用于自定义请求方法、头部、正文、超时、信号等。 定义如下:
参数详解:
返回值
返回一个 Promise<Response> 对象。
Response 表示请求的响应数据。
即使返回的 HTTP 状态码为 4xx 或 5xx,fetch 仍然会 成功解析并返回 Response 对象。
只有当请求本身出错(如网络错误、无效 URL、超时、中止)时,Promise 才会被拒绝。
异常与错误处理
以下情况会触发 Promise 拒绝:
示例
示例 1:基础 GET 请求
示例 2:POST 请求(JSON)
示例 3:上传文件(FormData)
示例 4:带超时的请求
示例 5:通过 AbortController 主动中止请求
示例 6:自定义重定向处理
示例 7:调试标签与日志
与其他类的关系
特性说明
- Cookie 管理:Scripting 中的
fetch默认不自动保存或携带 Cookie。响应中的Set-Cookie可通过response.cookies获取。 - 重定向行为:默认自动跟随,除非设置了
handleRedirect。 - 并发安全:多个并行请求相互独立。
- 文件支持:可通过
Data.fromFile()直接上传文件内容。
小结
fetch() 是 Scripting 网络请求体系的核心方法,兼容标准 Web API,同时提供更强的原生扩展能力:
- 支持本地文件访问
- 支持二进制
Data类型 - 支持自定义重定向逻辑
- 支持中止与超时机制
- 支持调试标识与原生日志追踪
