如何承诺我的 S3 getObjectUrl 函数?

How do I promisify my S3 getObjectUrl function?

我很难做出承诺,我将如何在下面承诺我的功能?

我想做一些类似 s3VerificationBucket.getSignedUrl().promise() 的事情来获得每个操作的承诺,然后使用 Promise.all(...) 等待所有操作的结果有回应吗???


router.get(`/api/verification/load`, auth, async (req, res) => {

  try {
    const user = await User.findOne({ GETS A USER })

    let urlArray = []

    const keyArray = [user.idKey, user.selfieKey]
   
    for (const key in keyArray) {
      s3VerificationBucket.getSignedUrl(
        "getObject",
        {
          Bucket: "app-verification",
          Key: key,
          Expires: 30,
        },
        (err, url) => urlArray.push(url)
      )
    }

    if (urlArray.length === 0) {  
      console.log("URL ARRAY EMPTY")  -> RETURNS "URL ARRAY EMPTY"
    }

    const idUrl = urlArray[0]
    const selfieUrl = urlArray[1]

    res.send({ user, idUrl, selfieUrl })
  } catch (err) {
    res.status(500).send()
  }
})

像这样:

const urlArray = await Promise.all(keyArray.map(key =>
    s3VerificationBucket.getSignedUrlPromise(
        "getObject",
        {
            Bucket: "app-verification",
            Key: key,
            Expires: 30,
        }
    )
));

有关 getSignedUrlPromise

的文档,请参阅 here