我想在Firebase中获取路径的值。说我做
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()
时,它会抛出一个错误。
为什么我不能这样做?似乎在文档中它是可能的。
答案 0 :(得分:1)
抛出错误,因为语法不正确;它需要被包含在一个块中:
.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()
}));
});
答案 1 :(得分:1)
看起来像语法问题。箭头功能有一些带括号等的有效配置,很难理清(有时在使用ES6一年后它仍然会咬我)。
这是一些需要考虑的有效版本。这不是可能的语法组合的详尽列表,但我发现它涵盖了我的大部分用例:
标准表格,多行块,括号。这是您在有更多操作时使用的版本,而不仅仅是返回一个值(例如dispatch
等副作用):
(snapshot) => {
const displayname = snapshot. val()
// then you'd dispatch here
return
}
一个班轮,箭头后面的术语被假定为返回值。此版本中右侧没有分配,也没有dispatch
来电:
snapshot => snapshot.val()
中间,括号括起来的多行,但仍然只有一个假定为返回值的值:
snapshot => ({
displayName: snapshot.val()
})
// returns { displayName: "foo" }