gpt4 book ai didi

node.js - 我的 async/await 函数未在 AWS Lambda 中等待。我缺少什么?

转载 作者:行者123 更新时间:2023-12-02 03:05:12 24 4
gpt4 key购买 nike

我在 AWS Lambda 中有一个函数可以检索 Stripe 中的用户详细信息。但是函数后面的代码首先执行。我错过了什么?

在我的例子中,该函数调用返回客户对象的 Stripe 函数。

我认为 Stripe 函数的细节与这个特定问题无关——问题是我的 async/await 的结构:

module.exports.getUserName = async (event, context)=>{

[code to get customerId from stripe]

var customerName

await stripe.customers.retrieve(customerId, function(err, customer){
if (err){}
else{
customerName = customer.name
}
})

console.log('This should run after stripe.customers.retrieve')

}

现在console.log语句首先运行。我还尝试将 Stripe 函数包装在单独的异步函数中,并尝试添加 try/catch。但目前还没有发挥作用。

如何确保控制台日志语句在 stripe.customers.retrieve 之后运行?

最佳答案

编辑:我检查了source对于 npm stripe 包。所有函数都会返回 Promises,但如果您另外提供回调,它们将被安排在下一个事件循环中调用(在 console.log 运行后立即)。

如果您要使用 Promise,您所需要做的就是不提供回调。使用 Promise.then() 代替:

await stripe.customers.retrieve(customerId).then(customer => {
customerName = customer.name
resolve()
}).catch(_=>{})

旧答案(仍然有效,但非常多余):

await 与 Promise 一起使用,它不会神奇地将异步代码转换为同步代码。我可以从老式的 function(err, customer){ 回调中看到,您的 stripe.customers.retrieve() 函数确实返回Promise,因此 await 实际上不会执行任何操作。

您需要将其包装在 promise 中才能与async/await一起使用:

await new Promise((resolve,reject) => { 
stripe.customers.retrieve(customerId, function(err, customer) {
if(!err) {
customerName = customer.name
resolve()
}
})
})

关于node.js - 我的 async/await 函数未在 AWS Lambda 中等待。我缺少什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59203672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com