Fetch Promise何时resolve?图像传输及res.blob()机制问询
Fetch Promise的resolve时机与HTTP传输细节
1. Fetch Promise何时resolve?
当服务器返回HTTP响应头(包含状态码、Content-Type等元数据)后,fetch的Promise就会立刻resolve,此时.then中的代码开始执行。这个时机不需要等待整个响应体(比如你的图像文件)传输完成。
2. resolve时图像是否已完全传输?
没有。fetch的Promise resolve仅代表响应头已接收,响应体的传输可能刚刚开始,或者已经传输了一部分,但肯定还没完成(除非图像极小,刚好和响应头一起传完,但这种情况极少)。
3. 能否认为resolve时图像还未开始传输?
不能。HTTP协议是流式传输模型,服务器在发送完响应头后,会紧接着开始发送响应体数据。所以当fetch Promise resolve时,图像数据的传输大概率已经在进行中了。
4. 调用await res.blob()是否会触发新的服务器通信?
不会。fetch请求在调用fetch()时就已经发起,服务器已经开始流式传输响应体。res.blob()的作用是消费Response对象中的可读流(ReadableStream),把接收到的所有响应体数据收集起来,转换成Blob格式。这个过程完全在本地处理,不会向服务器发送额外请求。
简单来说:fetch负责发起请求并拿到响应头,而res.blob()/res.text()等方法负责等待并处理完整的响应体数据。
内容的提问来源于stack exchange,提问作者Llama D'Attore
相关产品推荐
相关产品推荐

