首页 > 解决方案 > Promise.all 没有按预期解决承诺

问题描述

由于某种原因,这按预期工作:

  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 中包含 key,否则我无法将它们与代码中的另一个数据结构匹配。

标签: typescriptpromise

解决方案


您需要提供Promise.all一系列承诺。在您的第二个片段中,您将它提供给一组普通对象,其中一个键中有一个承诺。Promise.all不懂魔法,也无法等待你隐藏在所述对象中的承诺。

相反,请确保您在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 };
    })
);

推荐阅读