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

JavaScript异步函数返回Map无法遍历及键值获取问题

问题解决与Map遍历说明

错误原因

async 函数执行后返回的是Promise对象,不是直接的Map实例。你直接把 javed() 的结果传给 Dome,相当于让Promise去调用forEach,自然会触发res.forEach is not a function错误。

修复代码

有两种方式获取到实际的Map对象:

方式1:用await(需在async函数环境中调用)

async function init() {
  let x = await this.javed();
  this.Dome(x);
}
init();

方式2:用Promise的.then()方法

this.javed().then(x => {
  this.Dome(x);
});

修改后的完整可运行代码:

async function javed(){
  var map1 = await createMap();
  return map1;
}

function createMap(){
  var map2 = new Map();
  map2.set('11', true);
  map2.set('22', true);
  map2.set('33', false);
  map2.set('44', true);
  return map2;
}

// 调用逻辑
async function init() {
  let x = await javed();
  Dome(x);
}
init();

function Dome(res){
  // 修正forEach参数,获取键和值
  res.forEach((value, key) => {
    console.log(`键:${key},值:${value}`);
  })
}

Map遍历获取键和值的方法

Map的forEach方法回调有三个参数:

  • 第一个参数:当前遍历到的值(value)
  • 第二个参数:当前遍历到的键(key)
  • 第三个参数:当前的Map实例本身

除此之外,还有两种常用遍历方式:

  • 使用for...of循环(解构直接拿键值):
for (const [key, value] of res) {
  console.log(`键:${key},值:${value}`);
}
  • 单独获取键/值数组:
// 获取所有键的数组
const keys = Array.from(res.keys());
// 获取所有值的数组
const values = Array.from(res.values());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:52:26