You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在resp.blob() Promise resolve时获取Fetch请求路径?

解决在Fetch Blob回调中访问请求路径的问题

你的代码其实已经可以正常访问请求路径了,这里提供几种更清晰的实现方式:

方案一:直接使用现有代码(利用块级作用域特性)

for...of循环中用const声明的path属于每次迭代的块级作用域,异步回调会绑定当前迭代的path值,直接输出即可:

paths = ['1.png', '2.png', '3.png']
for (const path of paths) {
     fetch(path)
          .then(resp => resp.blob())
          .then(blob => {
            console.log('path: ' + path) // 此处path即为当前请求的路径
          })
          .catch((error) => {
            console.log(error)
          })
}

方案二:显式传递路径与Blob

如果想让逻辑更清晰,可以在Promise链式调用中同时返回路径和Blob对象:

paths = ['1.png', '2.png', '3.png']
for (const path of paths) {
     fetch(path)
          .then(resp => {
            // 先获取Blob,再与路径一起返回
            return resp.blob().then(blob => ({ blob, path }))
          })
          .then(({ blob, path }) => {
            console.log('path: ' + path)
            // 可同时处理Blob和路径
          })
          .catch((error) => {
            console.log(error)
          })
}

方案三:使用async/await简化异步逻辑

换成线性的async/await写法,代码可读性更高:

paths = ['1.png', '2.png', '3.png']
async function fetchFiles() {
  for (const path of paths) {
    try {
      const resp = await fetch(path)
      const blob = await resp.blob()
      console.log('path: ' + path)
      // 在这里处理Blob
    } catch (error) {
      console.log(error)
    }
  }
}
fetchFiles()

补充说明

如果之前用var声明path会出现变量覆盖问题,但const是块级作用域,每个迭代的path都是独立的,所以异步回调能正确捕获对应的值。

内容的提问来源于stack exchange,提问作者etayluz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:18:15