Promise.all 没有按预期解决承诺
Promise.all does not resolve promises as expected
出于某种原因,这按预期工作:
const metadatasExternal = await Promise.all(
NFTs.map(n => axios.get(n.metadataOnchain?.data.uri!))
)
但事实并非如此:
const metadatasExternal = await Promise.all(
NFTs.map(n => ({
metadataPDA: n.metadataPDA,
metadataExternal: axios.get(n.metadataOnchain?.data.uri!),
}))
)
具体来说,承诺没有得到解决。这是我得到的:
{
metadataPDA: PublicKey {}
metadataExternal: Promise { <pending> }
},
这是为什么?我该如何解决?我特别需要在每个承诺中包含 metadataPDA
键,否则我无法将它们与代码中的另一个数据结构匹配。
您需要提供 Promise.all
一组承诺。在您的第二个代码段中,您将其输入一组普通对象,并在其中一个键中承诺。 Promise.all
不懂魔法,也无法等待你隐藏在所述对象中的承诺。
相反,请确保您 return 在 map
-
内做出承诺
const metadatasExternal = await Promise.all(
NFTs.map(async n => {
const data = await axios.get(n.metadataOnchain?.data.uri!);
return { metadataPDA: n.metadataPDA, metadataExternal: data };
})
);
出于某种原因,这按预期工作:
const metadatasExternal = await Promise.all(
NFTs.map(n => axios.get(n.metadataOnchain?.data.uri!))
)
但事实并非如此:
const metadatasExternal = await Promise.all(
NFTs.map(n => ({
metadataPDA: n.metadataPDA,
metadataExternal: axios.get(n.metadataOnchain?.data.uri!),
}))
)
具体来说,承诺没有得到解决。这是我得到的:
{
metadataPDA: PublicKey {}
metadataExternal: Promise { <pending> }
},
这是为什么?我该如何解决?我特别需要在每个承诺中包含 metadataPDA
键,否则我无法将它们与代码中的另一个数据结构匹配。
您需要提供 Promise.all
一组承诺。在您的第二个代码段中,您将其输入一组普通对象,并在其中一个键中承诺。 Promise.all
不懂魔法,也无法等待你隐藏在所述对象中的承诺。
相反,请确保您 return 在 map
-
const metadatasExternal = await Promise.all(
NFTs.map(async n => {
const data = await axios.get(n.metadataOnchain?.data.uri!);
return { metadataPDA: n.metadataPDA, metadataExternal: data };
})
);