Node.js NodeJS:如果使用wait,则无法访问try/catch中的函数参数

Node.js NodeJS:如果使用wait,则无法访问try/catch中的函数参数,node.js,babeljs,Node.js,Babeljs,我在没有babel和babel的nodejs 8上测试了这段代码,它们都显示了相同的效果 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,

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

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)
  }
}
但是,如果我像这样删除wait,它不会抛出错误:

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)
  }
}
我很好奇为什么第一种方法会显示错误?我已经在谷歌上搜索过了&没有找到任何答案

编辑:

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

以下是我执行函数的方式:
refreshBalance{user:{id:'123'}}

将我的评论变成一个答案,因为它似乎对你有用

您对const user=的定义。。。正在隐藏或重写同名的函数参数,使其无法在定义const user的范围内访问函数参数


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

将我的评论变成一个答案,因为它似乎对您有效

您对const user=的定义。。。正在隐藏或重写同名的函数参数,使其无法在定义const user的范围内访问函数参数


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

您是否意识到const user正在重新定义一个新变量user,它将名为user的函数参数隐藏在定义新变量的范围内?我真的不知道你的问题是什么。哪个函数参数不能访问,哪里不能访问?啊,谢谢@jfriend00,你说的对。我可以通过将变量重命名为其他名称使其工作。您是否意识到const user正在重新定义一个新变量user,它将名为user的函数参数隐藏在定义新变量的范围内?我真的不知道你的问题是什么。哪个函数参数不能访问,哪里不能访问?啊,谢谢@jfriend00,你说的对。我可以通过将变量重命名为其他名称使其工作。