let object = [{
id: `01`, name: `fish`, type: `marine`,
}, {
id: `02`, name: `fish`, type: `fresh`,
}, {
id: `03`, name: `fish`, type: `tank`,
}, {
id: `04`, name: `animal`, type: `pet`,
}, {
id: `05`, name: `animal`, type: `wild`,
}, {
id: `06`, name: `animal`, type: `zoo`,
}, {
id: `07`, name: `food`, type: `veg`,
}, {
id: `08`, name: `food`, type: `non-veg`,
}]
let data = []
object.map((value) => {
data.push([value.name, value.type])
})
console.log(data)
在第一个示例中我可以在 map 函数之外获取数据,但在第二个示例中我无法获取数据
let object = [{
id: `01`, name: `fish`, type: `marine`,
}, {
id: `02`, name: `fish`, type: `fresh`,
}, {
id: `03`, name: `fish`, type: `tank`,
}, {
id: `04`, name: `animal`, type: `pet`,
}, {
id: `05`, name: `animal`, type: `wild`,
}, {
id: `06`, name: `animal`, type: `zoo`,
}, {
id: `07`, name: `food`, type: `veg`,
}, {
id: `08`, name: `food`, type: `non-veg`,
}]
let data=[];
let test;
object.map(async (value) => {
test = await getValue(value.name);
data.push([value.name,value.type,test]);
})
console.log(data);
如第一个示例所示,我可以轻松地在 map 函数之外获取数据,但在第二个函数中我得到空白数组,如何在 map 函数之外获取异步等待数据
- 我哪里做错了,我不明白
最佳答案
请注意,map 函数会生成一个 Promise 对象作为每个项目的返回值。
data
完成收集所有数据的时刻应该在所有 Promise 完成之后发生。
因此,为了确保过程完成,请在使用数据
之前使用await Promise.all()
。
let object = [{
id: `01`, name: `fish`, type: `marine`,
}, {
id: `02`, name: `fish`, type: `fresh`,
}, {
id: `03`, name: `fish`, type: `tank`,
}, {
id: `04`, name: `animal`, type: `pet`,
}, {
id: `05`, name: `animal`, type: `wild`,
}, {
id: `06`, name: `animal`, type: `zoo`,
}, {
id: `07`, name: `food`, type: `veg`,
}, {
id: `08`, name: `food`, type: `non-veg`,
}]
let data=[];
let test;
let promises = object.map(async (value) => {
test = await getValue(value.name);
data.push([value.name,value.type,test]);
})
// 1. This line matters
await Promise.all(promises);
console.log(data);
// 2. Or if you cannot use await here
Promise.all(promises).then(() => {
console.log(data);
});
顺便说一句,由于 getValue
函数是异步的,因此您可能会以完全随机的顺序获取数据,如果您关心顺序,则可能需要另一种方法。
关于javascript - 在 Node js/javascript中的 map 函数之外获取异步等待数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68449668/