Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更新Firebase列表中的最后一个子项_Javascript_Firebase - Fatal编程技术网

Javascript 更新Firebase列表中的最后一个子项

Javascript 更新Firebase列表中的最后一个子项,javascript,firebase,Javascript,Firebase,Firebase JS SDK中的文档有点晦涩难懂,但从我收集的信息来看,如果我想更新列表的最后一项,我必须像这样引用列表并链接更新 const { uid } = await firebase.auth().currentUser; const ref = firebase .app() .database() .ref(); const userRef = ref .child('users/' + uid + '/myList') .orderB

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
        }
      }
    }
  }
}

此代码返回一个快照,但您将其视为引用

const userRef = ref
    .child('users/' + uid + '/myList')
    .orderByKey()
    .limitToLast(1)
不能对快照执行update()

  .update({ stamp: Date.now() });
这就是为什么需要将
.ref
添加到snaptshot

const userRef = ref
    .child('users/' + uid + '/myList')
    .orderByKey()
    .limitToLast(1)
    .ref                            // <- this line here
    .update({ stamp: Date.now() });
const userRef=ref
.child('users/'+uid+'/myList'))
.orderByKey()
.limitToLast(1)

.ref//你说的“没有骰子”是什么意思?这里有什么问题吗?最后的评论让我哈哈大笑。我不认为@DougStevenson实际上是在问不掷骰子意味着什么——他是在问我们的实际问题是什么。问题中的错误消息非常清楚:。update不是该调用的函数,因此您正在调用不存在的东西。该文档提供了几个关于如何更新字段的具体示例—请看。请通读并更新您的代码,使其包含合法的API调用,并让我们知道您遇到了什么问题。谢谢@Jay,是的,我认为TypeError就足够了,如“为什么出现类型错误,有人知道正确的方法吗?”;)。我在文档中看不到任何东西在没有先前对创建对象的引用的情况下执行类似的操作。我想我想做的很清楚,对吧?然而,缺少的上下文可能是,我正在尝试执行一个独立的操作,之前没有引用列表中的内容。我只知道列表存在,只想更新最后一项。谢谢你的帮助。完全卡在这里,我知道我做错了。使用firebase,如果你想更新任何东西,你需要a)明确知道节点的“路径”,或b)通过观察或查询检索该路径。因此对于a)如果要更新帖子列表中的最后一篇帖子,
var lastPost=firebase.database().ref('posts').limitToLast(1)-该帖子将在快照中返回,以便您知道密钥,然后可以通过对该节点的引用更新您想要的任何子值。所以底线是您需要更新ref,而不是从查询返回的快照。有意义吗?没有错误,只是默默地执行它的操作,并且数据库没有更新。您可以检查是否将该戳记作为新的子项添加到父项中吗?在更新之前,我们可能需要传递子名称