【问题标题】:Undefined value from imported function来自导入函数的未定义值
【发布时间】:2019-05-25 16:02:59
【问题描述】:

我试图从另一个我有一些函数的 JS“帮助程序”文件中获取 TRUE/FALSE 值,但是当我尝试从该函数获取返回值时,我得到的只是“未定义”

//firebaseHelper.js
//js file where I have the function that I want to use in my main LoginView.jsx" file

export function isUserLogged(){
    firebase.auth().onAuthStateChanged(user =>{
        if(user){
            return true;
        }else{
            return false;
        }
    })    
}


//LoginView.jsx

import {isUserLogged, signOut} from "../../helpers/firebaseHelper";

class Login extends React.Component {
  state = {
    toDashboard: false,
  }

  componentDidMount(){
    console.log(isUserLogged());
  }

console.log 返回 undefined,但是当我调用例如 signOut 或 isUserLogged 而不是 return 我在这些函数中添加一个 console.log 时,我可以在控制台中看到答案。

【问题讨论】:

  • isUserLogged 函数没有返回值,这就是为什么 undefined 打印为 console.log(isUserLogged());

标签: javascript reactjs firebase


【解决方案1】:

问题在于firebase.auth().onAuthStateChanged 是异步的。

您可以执行以下操作:

//LoginView.jsx

class Login extends React.Component {
  state = {
    toDashboard: false,
  }


componentDidMount = async () => {
        await firebase.auth().onAuthStateChanged(user => {
            if (user) {
                ...logged-in
            } else {
                ...logged-out
            }
        })
    }

【讨论】:

  • 我很高兴:)
【解决方案2】:

试试这个:将你的 isUserLogged 函数替换为:

export function isUserLogged(){
    return firebase.auth().onAuthStateChanged(user => !!user);
}

【讨论】:

  • 谢谢您,先生,我试过了,但没有用 :( 感谢您抽出宝贵时间,我将使用 Yossi 给我的示例
猜你喜欢
  • 2020-05-12
  • 2017-04-19
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 2021-12-24
  • 1970-01-01
相关资源
最近更新 更多