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

遍历数组时如何对部分符合条件的元素选择性发起异步请求?

实现方案

原有代码问题梳理

  • 属性名拼写错误:data对象中定义的数组键为photo,调用时错写为data.photos
  • await使用不符合语法规范:await只能在async修饰的异步函数内使用,你写的map回调函数没有加async声明
  • 异步返回值未处理:async函数默认返回Promise对象,直接调用map得到的是Promise数组,需要用Promise.all等待所有异步操作执行完成才能拿到最终结果
  • 输出变量名拼写错误:你定义的处理后变量为newData,打印时错写为不存在的newPtotoObj
  • 数值判断逻辑有缺陷:isNaN判断会对空字符串、null等非数值类型也返回false,更稳妥的方案是直接用typeof判断元素是否为数字类型

完整可运行代码

let data = {
  photo: [33,24, {blob: 'blob'}, 44]
}

// 异步操作需要包裹在async函数内执行
async function handlePhotoArr() {
  // map传入async回调,得到Promise数组
  const promiseList = data.photo.map(async (photo) => {
    if (typeof photo === 'number') {
      return photo
    }
    // 非数值类型发起异步请求,替换为返回的id
    const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
    const resData = await response.json();
    return resData.id
  })
  // 等待所有异步请求执行完成,得到最终数组
  const finalData = await Promise.all(promiseList)
  console.log(finalData)
  // 输出结果:[33, 24, 1, 44],其中1为示例接口返回的id值
}

// 调用执行函数
handlePhotoArr()

注意事项

你只需要将代码中的示例接口地址替换为你实际的blob上传接口,即可得到符合预期的[33,24, value_from_request, 44]格式的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 05:30:05