如何在JavaScript中将Web5 DWN查询的对象记录转为数组?
问题:将DWN查询返回的单个对象合并为对象数组
调用Web5 DWN的records.query API查询记录时,当前返回结果是逐个输出的单个对象:
Object { title: "Title 1", desc: "description 1" }
Object { title: "Title 2", desc: "description 2" }
Object { title: "Title 3", desc: "description 3" }
需要将结果整理为对象数组,目标格式如下:
[ { title: "Title 1", desc: "description 1" }, { title: "Title 2", desc: "description 2" }, { title: "Title 3", desc: "description 3" } ];
修改后的代码A
const { records } = await web5.dwn.records.query({ message: { filter: { dataFormat: 'application/json' } }, }); console.log("total Saved records", records.length); // 初始化空数组存储结果 const recordsArray = []; // 循环解析每条记录并添加到数组 for (let record of records) { const rec = await record.data.json(); recordsArray.push(rec); }; // 输出整理好的对象数组 console.log(recordsArray);
修改后的代码B
const response = await web5.dwn.records.query({ message: { filter: { dataFormat: 'application/json' }, }, }); console.log("total Saved records", response.records.length); // 用map生成Promise数组,通过Promise.all等待所有异步解析完成 const recordsArray = await Promise.all( response.records.map(async record => { return await record.data.json(); }) ); // 输出整理好的对象数组 console.log(recordsArray);
核心修改点
- 新增空数组
recordsArray用于收集所有解析后的对象 - 代码A利用
for...of天然支持异步等待的特性,逐条解析后将对象推入数组 - 代码B替换原
forEach(无法正确处理异步回调),改用map+Promise.all批量处理异步解析,一次性得到完整数组
内容的提问来源于stack exchange,提问作者Nancy Moore
相关产品推荐
相关产品推荐

