Javascript 用承诺抓住Firebase中Path的价值
我想获取Firebase中路径的值。说我喜欢Javascript 用承诺抓住Firebase中Path的价值,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我想获取Firebase中路径的值。说我喜欢 firebaseAuth.onAuthStateChanged(user => { var displayName = firebase.database() .ref('/users/' + user.uid + '/name/') .once('value').then(snapshot => snapshot.val()); store.dispatch('checkUser', {
firebaseAuth.onAuthStateChanged(user => {
var displayName =
firebase.database()
.ref('/users/' + user.uid + '/name/')
.once('value').then(snapshot => snapshot.val());
store.dispatch('checkUser', {
user
displayName
});
});
在我的控制台中,我得到了一个承诺,作为我的用户的值displayName
,在这个承诺中我看到了正确的值,但是我该如何实现它呢?当我尝试在回调中将displayName设置为snapshot.val()
时,它会抛出一个错误
为什么我不能这样做?在文档中似乎这是可能的
由于语法不正确而引发错误;需要将其封闭在一个块中:
.once('value').then(snapshot => { const displayName = snapshot.val(); });
然而,这并不能解决问题。您需要将dispatch
调用移动到已解析快照的回调中:
firebaseAuth.onAuthStateChanged(user => {
firebase.database()
.ref('/users/' + user.uid + '/name/')
.once('value').then(snapshot => store.dispatch('checkUser', {
user
displayName: snapshot.val()
}));
});
看起来像是语法问题。箭头函数有一些带有括号等的有效配置,这些配置可能很难分类(在使用ES6一年后,它有时仍然会咬我)
这里有几个要考虑的有效版本。这不是可能的语法组合的详尽列表,但我发现它涵盖了我的大多数用例:
标准格式,多行块,括号。当您需要做的不仅仅是返回一个值(例如,dispatch
)等副作用时,您可以使用此版本:
一行,箭头后的术语假定为返回值。在此版本中,右侧没有分配,并且没有调度
调用:
snapshot => snapshot.val()
在中间,多行用括号括起来,但仍然只有一个值假定为返回值:
snapshot => ({
displayName: snapshot.val()
})
// returns { displayName: "foo" }
它不可用的原因是您正在同步调用
store.dispatch
,。它在可用的snapshot.val()
之前启动。您尝试将dispatch
放入最后一个Promise
的回调中是正确的。但是,您的问题中没有包含错误
文本是不正确的,因为这可能是问题的根源。@Brandon我已经更新了问题。谢谢。Firebase身份验证子系统将存储显示名称、用户名、imageUrl等所有信息。。。但是,您不能通过他们的GUI查看它。您只需请求currentUser属性。请参阅@RonRoyston,我正在使用电子邮件和密码注册,因此当用户创建我不相信的帐户时,我不会自动获得displayName属性。@staxwell True,对。我已经有一段时间没有使用它了,但我记得您实际上可以将displayName直接设置到Firebase auth子系统中。但你必须捕捉它。我希望我说的有道理……这是有道理的。谢谢
snapshot => ({
displayName: snapshot.val()
})
// returns { displayName: "foo" }