Компонент доступа это внутри Firebase обещание reposonse - PullRequest
0 голосов
/ 01 июля 2019

Я пытался связать его, как будто это не сработало :)

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

... так как он выдает следующую ошибку: firebaseInstance.auth(...).fetchSignInMethodsForEmail(...).bind is not a function

Вот логика компонента. Может ли кто-нибудь предложить правильный способ доступа к нему после разрешения ответа firebase?: bowing:

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`)
          }
        })
    }
  }
}

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Используя синтаксис ES8 async / await sugar, вы можете сделать это следующим образом:

async onEmailSignUp () {
    try {
        const response = await firebaseInstance.auth().fetchSignInMethodsForEmail(this.signUpData.email)
        // other logic
    } catch (error) {
        console.log(error)
        this.$refs.email.setCustomValidity(`error`)
    }
}
1 голос
/ 01 июля 2019

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

...