0

我试图绑定它,好像它似乎没有成功:)

firebaseInstance.auth().fetchSignInMethodsForEmail(this.signUpData.email)
  .then((response) => {
    ... all logic
  }).bind(this)

...因为它输出以下错误: firebaseInstance.auth(...).fetchSignInMethodsForEmail(...).bind is not a function

这是组件的逻辑,有人可以建议在firebase响应解决后访问它的正确方法吗?:鞠躬:

import { VALIDATION_MESSAGES, VALUES } from './signup.module.config'
import GLOBAL_EVENTS from 'values/events'
import { firebaseInstance } from 'database'

export default {
  name: `SignUpForm`,
  data() {
    return {
      signUpData: {
        email: ``,
        password: ``,
        confirmPassword: ``
      }
    }
  },
  methods: {
    onEmailSignUp() {
      // Here this is component
      console.log(this.$refs)

      firebaseInstance.auth().fetchSignInMethodsForEmail(this.signUpData.email)
        .then((response) => {
            // other logic
          } else {
            // Here this is lost and equals undefined
            this.$refs.email.setCustomValidity(`error`)
          }
        })
    }
  }
}
4

2 回答 2

1

bind指令应该用于函数对象,而不是函数返回值。

通过做

firebaseInstance.auth().fetchSignInMethodsForEmail(this.signUpData.email) .then((response) => { ... all logic }).bind(this)

您尝试在您的承诺方法返回时使用绑定then,这是一个承诺对象,不能使用绑定。

你可以试试firebaseInstance.auth().fetchSignInMethodsForEmail(this.signUpData.email) .then(function(response){ ... all logic }.bind(this))

反而。这里将bind其放在 promise 中的函数 send 上,因此它应该可以正常工作。我也将函数从箭头函数转换为普通函数,因为我认为不需要绑定箭头函数。

于 2019-07-01T07:56:24.067 回答
1

使用 ES8 async/await 糖语法,你可以这样做:

async onEmailSignUp () {
    try {
        const response = await firebaseInstance.auth().fetchSignInMethodsForEmail(this.signUpData.email)
        // other logic
    } catch (error) {
        console.log(error)
        this.$refs.email.setCustomValidity(`error`)
    }
}
于 2019-07-01T08:08:54.257 回答