Асинхронная функция не распознается в обратном вызове Firebase - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть фрагмент кода, который пытается войти в систему пользователя в firebase, и после завершения аутентификации я хочу зарегистрировать пользователя для push-уведомлений, используя Expo .

Мой код выглядит так:

import React, { Component } from 'react';
import { StyleSheet, Text, View, AsyncStorage } from "react-native";
import { Container, Content, Form, Input, Item, Button, Label } from 'native-base'

import * as firebase from 'firebase';

import { Permissions, Notifications } from 'expo';

export default class Login extends React.Component {
  constructor(props){
    super(props)

    this.state = ({
      email: '',
      password: ''
    })
  }

  registerForPushNotificationsAsync = async (user) => {
    // Here I have few Expo related 'await' operations returning notification token from expo
  }

  // ...........

  loginUser = (email, password) => {
    try{
      firebase.auth().signInWithEmailAndPassword(email, password).then(function(user){
        this.registerForPushNotificationsAsync(user);
      })
    }
    catch(error){
      console.log(error.toString())
    }
  }

  render() {
    return (
      <Container style={styles.container}>
        <Form>
          // .......
          <Button style={{marginTop: 10}}
            full
            rounded
            success
            onPress={()=>this.loginUser(this.state.email, this.state.password)}
          >
            <Text style={styles.inputButtonsText}>Login</Text>
          </Button>
          // ......
        </Form>
      </Container>
    );
  }
}

довольно ясно, что происходит и что ожидается, но по какой-то причине, когда я достигаю этой точки в коде:

this.registerForPushNotificationsAsync(user);

Я получаю сообщение об ошибке: this.registerForPushNotificationsAsync не является функцией. (В this.registerForPushNotificationsAsync (пользователь) this.registerForPushNotificationsAsync имеет значение undefined )

Итак, теперь я не могу понять, почему функция не определена.

1 Ответ

0 голосов
/ 08 ноября 2018

Это потому, что вы используете анонимную функцию старого стиля, где this ведет себя немного по-другому.Если вы переключите обратный вызов внутри .then() на лямбду ES6, он должен работать нормально, так как this будет ссылаться на родительский контекст.

...