Javascript firebase登录后的TypeScript返回对象
我有以下代码Javascript firebase登录后的TypeScript返回对象,javascript,typescript,firebase,types,ionic2,Javascript,Typescript,Firebase,Types,Ionic2,我有以下代码 login = (email: string, senha: string): { nome: string, genero: string, foto: string;} => { this.fireAuth.signInWithEmailAndPassword(email, senha).then(res => { firebase.database().ref('Usuarios/' + res.uid).once('value', sna
login = (email: string, senha: string): { nome: string, genero: string, foto: string;} => {
this.fireAuth.signInWithEmailAndPassword(email, senha).then(res => {
firebase.database().ref('Usuarios/' + res.uid).once('value', snapshot => {
return {
nome: snapshot.val().nome,
genero: snapshot.val().genero,
foto: snapshot.val().avatar
};
});
});
}
我需要它在我登录firebase后返回一个对象,然后获取我的信息,但它会抛出一个错误,即如果函数类型不是“void”或“any”,但我返回的是指定的对象,我必须返回一些东西
我能做什么?您的
内部函数返回一个对象。不是分配给登录的功能。最外层的函数应该返回一个承诺
尝试:
login=(email:string,senha:string):Promise=>{
//也回到这里
返回此.fireAuth.signiWithEmailandPassword(电子邮件,senha)。然后(res=>{
//返回数据库调用
返回firebase.database().ref('Usuarios/'+res.uid)。once('value',snapshot=>{
返回{
nome:snapshot.val().nome,
慷慨:snapshot.val().慷慨,
foto:snapshot.val().avatar
};
});
});
}
您使用了错误的异步和承诺概念。
有几个选项可以解决这个问题
1-您可以返回承诺,并让来电者解决它
login = (email: string, senha: string): Promise<{nome: string, genero: string, foto: string}> => {
return new Promise<{nome: string, genero: string, foto: string}>((resolver, rejeitar) => {
this.fireAuth.signInWithEmailAndPassword(email, senha).then(res => {
firebase.database().ref('Usuarios/' + res.uid).once('value', snapshot => {
resolver({
nome: snapshot.val().nome,
genero: snapshot.val().genero,
foto: snapshot.val().avatar
});
});
});
});
}
编辑:我查看了Firebase文档()。还有第二个错误
firebase.database().ref('Usuarios/' + res.uid).once('value', snapshot => {
应该是:
firebase.database().ref('Usuarios/' + res.uid).once('value').then(snapshot => {
将尝试您的解决方案,并尽快通知您这是否有效。处理Promiss会在登录时破坏我的应用程序,但我认为这只是firebase Promiss,其他组件Promiss不会破坏它(不知道为什么,但这方面存在很多github问题)。这是因为您使用的是类似同步的编程。使用Async时,必须使用回调来接收操作的响应。承诺没有办法逃避承诺。你必须拥抱,然后哈哈。我也经历过同样的经历!卡拉·阿戈拉(Cara agora que vi que vcéBR)哈哈哈,这是一个解决两个问题的好办法,因为这两个问题都是如此。Eu tava tratando作为promessas,mas usando组件做Ionic nas promessas做firebase quebrava meu应用程序,fazendo essa Promessapor fora não quebra nada和deixou登录mais rapido。Valeu mesmo Caramo在一开始,使用期票是完全不同的。但随着时间的推移,你会习惯的。不客气:)
firebase.database().ref('Usuarios/' + res.uid).once('value', snapshot => {
firebase.database().ref('Usuarios/' + res.uid).once('value').then(snapshot => {