在对一个Firebase对象进行JSON.stringify后,数据丢失了。

18 浏览
0 Comments

在对一个Firebase对象进行JSON.stringify后,数据丢失了。

我有一个与Firebase相关联的应用程序。当用户登录时,我将他的对象firebase.auth().currentUser赋值给一个变量。然后,我给该变量添加一个属性(username)。问题是,当我console.log(currentUser)时,我可以看到添加了属性的对象。但是,当我尝试JSON.stringifyJSON.parse(我这样做是为了将其存储在localStorage中)时,我找不到我添加的username属性。这里发生了什么?

var currentUser = firebase.auth().currentUser
currentUser.username = 'Foo';
console.log(currentUser) // => 这里我能看到我的属性username
console.log(JSON.parse(JSON.stringify(currentUser))) // => 这里我找不到我添加的属性

0
0 Comments

问题的原因是currentUser不是一个普通的对象,而是User class的实例。User类实现了toJSON()方法,JSON.stringify会自动检测并使用该方法将对象转换为JSON的规范方式。

要向Firebase用户合并自定义属性,可以先添加toJSON()方法:

var currentUser = firebase.auth().currentUser.toJSON();

这将把User对象转换为普通对象,然后可以添加其他属性,并按预期进行序列化。然而,请注意,这个转换不会在服务器端或firebase.auth().currentUser上持久化。

非常感谢,Bleigh!你无法想象我为了找到这个答案搜索了多少个小时!在Angular中,如果你使用(user$ | async),就会在HTML中打印出“普通”对象。但是每次我在TS中尝试操作它时...就会抛出错误!使用toJSON()只会得到“好”的属性-易于操作且不会出错!谢谢!

0