首页 > 解决方案 > 你好,我不明白为什么下面的 this 指向全局对象,我以为它会指向用户

问题描述

我无法弄清楚为什么下面代码中的这个关键字指向全局对象,因为我在 .then 中使用了箭头函数。我认为它会指向用户对象:

以下功能在我的用户控制器中:

   exports.register = function(req, res) {
      let user = new User(req.body)
      user.register().then(()=> {
        //this is pointing to global object not user object
        console.log(this)
        req.session.user ={username: user.data.username}
        req.session.save(()=>res.redirect('/'))
      })
      .catch((regErrors)=>{
        console.log(regErrors)
         regErrors.forEach((e)=>{
            req.flash('regErrors',e)
          })
          req.session.save(()=>res.redirect('/'))
      })
    }

注册方法代码:

User.prototype.register = function(){
  return new Promise(async (resolve,reject) =>{
    //  Validate user data
    this.cleanUp()
    await this.validate()
    // save the user data into a database if errors array is empty 
    if (!this.errors.length) {
      // hash user password
      let salt = bcrypt.genSaltSync(10)
      this.data.password = bcrypt.hashSync(this.data.password, salt)
      usersCollection.insertOne(this.data)
      resolve()

    }
    else {
      reject(this.errors)
    }
  })

标签: javascriptnode.jsasync-await

解决方案


推荐阅读