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
相关产品推荐
相关产品推荐

