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 };
    })
);