привет, я не могу понять, почему ниже это указывает на глобальный объект, я думал, что это указывает на пользователя - PullRequest
1 голос
/ 06 мая 2020

Я не могу понять, почему это ключевое слово в приведенном ниже коде указывает на глобальный объект, поскольку я использую стрелочную функцию в .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)
    }
  })
...