Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript firebase登录后的TypeScript返回对象_Javascript_Typescript_Firebase_Types_Ionic2 - Fatal编程技术网

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 => {