nodejs中的变量作用域

大葛们,为什么我这个userid怎么都读取不到,菜是原罪a
求大葛们教教我

function postUserData(){
    return new Promise((resolve, reject) => {
        mysql.getConnection(function(err,connection) {
            if(err) {
                console.log(err);
                reject(err)
                return res.status(500)
            }
            connection.query('insert into user values(0,?,?,?)',Object.values(users),function(error,results,fields){
                if(error) {
                    console.log(error);
                    return res.status(500)
                }
                console.log('-----------users----------',users);
                console.log('---------results-------------',results.insertId);
                connection.release()
                resolve(results.insertId)
            })
        })  
    })
}
router.post('/wx',async(req,res) => {
    try {
        let body = req.body
        console.log('---body----',body);
        USER_PRIVACY_DATA.js_code = body.code
        let users = {
            nickName:body.nickName,
            avatarUrl:body.avatarUrl,
            gender:body.gender
        }
        let userid;
        const wxds = await axios.get(`https://api.weixin.qq.com/sns/jscode2session`,{params:USER_PRIVACY_DATA})
        let length = 0
        const ormUser = orm.model('user')
        ormUser.sql(`select * from user where avatarUrl="${users.avatarUrl}"`,async(err,data) => {
            if(err) {
                console.log('select---------------err',err);
                return res.status(500)
            }
            userid = data.id
            length = data.length
            if(length < 1) {
                userid = await postUserData()
                console.log('--------------00--userid--00-----',userid);

            }
            console.log('--------------11--userid--22-----',userid);
            const token = jwt.sign(wxds.data, SIGNATERE, {expiresIn: 10 * 1})
            res.send({code:200,msg:'做的很棒孩子',data:{userid,token}})
        })
    } catch (err) {
        console.log(err);
        res.status(500).send(err)
    }
})

在您的代码中,userid是在router.post方法中定义的,并且在该方法的回调函数中被赋值。然而,在postUserData方法中,userid是无法访问到的,因为它是在另一个函数作用域中定义的。如果您想在postUserData方法中访问userid,可以将它作为参数传递进去

function postUserData(userid) {
  // ...
}

router.post('/wx', async (req, res) => {
  try {
    // ...
    let userid;
    // ...
    if (length < 1) {
      userid = await postUserData(userid); // 将userid作为参数传递给postUserData方法
      console.log('--------------00--userid--00-----', userid);
    }
    // ...
  } catch (err) {
    console.log(err);
    res.status(500).send(err)
  }
});


在postUserData方法中,您需要修改方法的定义和调用方式

function postUserData(userid) {
  return new Promise((resolve, reject) => {
    mysql.getConnection(function(err, connection) {
      if (err) {
        console.log(err);
        reject(err);
        return res.status(500);
      }
      connection.query('insert into user values(0,?,?,?)', Object.values(users), function(error, results, fields) {
        if (error) {
          console.log(error);
          return res.status(500);
        }
        console.log('-----------users----------', users);
        console.log('---------results-------------', results.insertId);
        connection.release();
        resolve(results.insertId);
      });
    });
  });
}

router.post('/wx', async (req, res) => {
  try {
    // ...
    let userid;
    // ...
    if (length < 1) {
      userid = await postUserData(userid); // 将userid作为参数传递给postUserData方法
      console.log('--------------00--userid--00-----', userid);
    }
    // ...
  } catch (err) {
    console.log(err);
    res.status(500).send(err)
  }
});
 

这样就可以在postUserData方法中访问到userid了。

想不通,睡不着啊,酒酒海子吧