【问题标题】:I can't resolve the promise of what other function returns我无法解决其他函数返回的承诺
【发布时间】:2022-11-10 17:39:58
【问题描述】:

我正在使用 Nestjs 和 Prisma 开发一个项目,连接到 Postgres 数据库。而且我必须使用 aws Secrets 服务建立连接 url。问题是我正在使用 Typescript,而 AWS 没有提供示例代码。这就是为什么我找到以下代码来获取秘密的原因

export async function getSecret(): Promise<string> {
var AWS = require('aws-sdk'),
    region = "region",
    secretName = "secret",
    secret,
    decodedBinarySecret;

// Create a Secrets Manager client
var client = await new AWS.SecretsManager({
    region: region
});
return new Promise((resolve, reject) => {
    client.getSecretValue({ SecretId: secretName }, (err, data) => {
        if (err) {
            console.log(JSON.stringify(err))
            reject(err)
            return
        }

        if ('SecretString' in data) {
            
            resolve(data.SecretString as string)

        } else {
            resolve(Buffer.from(data.SecretBinary as any, 'base64').toString('ascii'))
        }
    })
})

}

现在即使我尝试解决它返回的承诺,就像代码不会停止并等待承诺解决。我不知道该怎么做,因为我只收到 Promise

async function takeSecrets() {

const url = await  getSecret()
const result : string=url
console.log(result)
return result

}

async function makeURL(){
let url:any=''
takeSecrets().then(resp=>{
    const secret=JSON.parse(resp)
    
    url = `${secret.engine}://${secret.username}:${secret.password}@${secret.host}:${secret.port}/database?schema=public`
}).catch(err=>{
    console.log(err)
})


console.log(url)
return url

}

即使做了所有这些我仍然收到承诺并且你需要一个字符串到 url 路由

【问题讨论】:

  • How do I ask a good question?:"不要发布代码、数据、错误消息等的图像。- 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,这些无法通过文本准确描述的事情。”
  • 感谢您的建议,我已经进行了更改以使其成为更好的帖子

标签: typescript async-await nestjs es6-promise prisma


【解决方案1】:

您还需要将makeUrl 设为async 函数,然后等待takeSecrets()

takeSecrets() 解决之前,您正在点击console.logreturn 语句。这就是为什么你会得到Promise 作为结果。

async function makeURL() {
  ...
  const response = await takeSecrets();
  ...
}

正如问题 cmets 所建议的那样,您应该避免截取代码,而是添加代码块。

或者:

你甚至不需要调用takeSecrets(),因为你可以从内部函数中获取数据:

async function makeURL() {
  ...
  const response = await getSecret();
  // do something with the response
  ...
}

【讨论】:

  • 我正在使用 console.log 来测试什么数据到达,即使我按照你写的那样做,我仍然收到一个 Promise。我不知道我在做什么错谢谢你的旅游帮助
猜你喜欢
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多