【发布时间】:2019-02-23 04:04:28
【问题描述】:
Firebase JS SDK 中的文档有点晦涩,但据我所知,如果我想更新列表的最后一项,我必须像这样引用列表并链接更新?
const { uid } = await firebase.auth().currentUser;
const ref = firebase
.app()
.database()
.ref();
const userRef = ref
.child('users/' + uid + '/myList')
.orderByKey()
.limitToLast(1)
.update({ stamp: Date.now() });
但没有骰子。
// TypeError: ref.child(...).orderByKey(...).limitToLast(...).update is not a function
更新:
我可以清楚地看到我的 ref 的正确 toString 值,但值是不存在的?
const { uid } = await firebase.auth().currentUser;
const ref = firebase
.database()
.ref('users/' + uid)
.child('myList');
console.log(ref.toString()); // firebaseio.com/users/XtNjKhhF...lfBn2/myList
ref.on('value', function(snap) {
console.log('snap val', snap.val()); // never called
});
// data is clearly there, no?
{
"users" : {
"Xt....lfABn2" : {
"myList" : {
"-LZDd5G2lhNv5ogv" : {
"start" : 1550728848450
}
}
}
}
}
【问题讨论】:
-
“没有骰子”是什么意思?这里有什么问题?
-
最后的评论让我哈哈大笑。我不认为@DougStevenson 实际上是在问 No Dice 是什么意思——他问的是我们的实际问题。问题中的错误消息非常清楚: .update 不是该调用的函数,因此您正在调用不存在的东西。该文档提供了几个关于如何更新字段的具体示例 - 请查看 Update Specific Fields。通读并更新您的代码,使其包含合法的 API 调用,并让我们知道您遇到的问题。
-
谢谢@Jay,是的,我认为 TypeError 就足够了,“为什么会出现类型错误,有人知道正确的方法吗?” ;)。如果没有先前对创建的对象的引用,我在文档中看不到任何执行此类操作的内容。我认为它很清楚我想要做什么,对吧?但是,缺少的上下文可能是我正在尝试进行独立操作,而以前没有引用列表中的内容。我只知道该列表存在并且只想更新最后一项。谢谢您的帮助。完全卡在这里,我知道我做错了。
-
使用 firebase,如果您想更新任何需要 a) 明确知道节点的“路径”,或 b) 通过观察或查询检索该路径。因此,对于 a) 如果您想更新帖子列表中的最后一篇帖子,
var lastPost = firebase.database().ref('posts').limitToLast(1);- 该帖子将在快照中返回,因此您知道密钥,然后可以通过 ref 更新您想要的任何子值节点。所以底线是您需要更新 ref,而不是从查询返回的快照。有意义吗?
标签: javascript firebase