Firebase 回调中无法识别异步函数
2018-11-07
207
我有一段代码试图将用户登录到 firebase,一旦身份验证完成,我想使用 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(user) 中,this.registerForPushNotificationsAsync 为 未定义 )
因此,现在我不明白为什么该函数未定义。
1个回答
这是因为您使用的是旧式匿名函数,其中
this
的行为略有不同。如果您将
.then()
中的回调切换为 ES6 lambda,它应该可以正常工作,因为
this
将引用父上下文。
Kai
2018-11-07