gpt4 book ai didi

node.js - NodeJS : can't access function parameter inside try/catch if use await

转载 作者:太空宇宙 更新时间:2023-11-04 03:25:50 24 4
gpt4 key购买 nike

我在nodejs 8(没有babel)和babel上测试了这段代码,它们都显示了相同的效果。

async function refreshBalance({ user }) {
console.log(user) // show correct variable
try {
console.log(user) // throw error: variable not defined
const user = await findObject('_User', user.id, {
sessionToken: user.getSessionToken(),
})

return {
balance: user.get('balance'),
balanceUpdatedAt: user.get('updatedAt'),
}
}
catch (error) {
return formattedError(error)
}
}

但如果我像这样删除 await ,它不会抛出错误:

async function refreshBalance({ user }) {
console.log(user) // show correct variable
try {
console.log(user) // show correct variable, no error

return true
}
catch (error) {
return formattedError(error)
}
}

我知道我可以缓存这样的变量以使其工作:

async function refreshBalance({ user }) {
const theUser = user
try {
console.log(theUser) // `theUser` variable is safe, `user` variable will throw error
const user = await findObject('_User', theUser.id, {
sessionToken: user.getSessionToken(),
})

return {
balance: theUser.get('balance'),
balanceUpdatedAt: theUser.get('updatedAt'),
}
}
catch (error) {
return formattedError(error)
}
}

我很好奇为什么第一种方法显示错误?我已经搜索了 google,但没有找到任何答案。

编辑:

如果user是一个对象,它会抛出一个错误,如果user是字符串或数字,它不会抛出错误。

这是我执行该函数的方式:refreshBalance({ user: { id: '123'} })

最佳答案

将我的评论变成答案,因为它似乎对您有用。

您对 const user = ... 的定义是“隐藏”或“覆盖”同名的函数参数,使其在定义 const user 的范围内无法访问该函数参数。

最简单的解决方案是将这两个变量之一的名称更改为其他名称,这样它们就不会冲突。

关于node.js - NodeJS : can't access function parameter inside try/catch if use await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44873054/

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