最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Firebase云功能。无法读取未定义的属性父级(.ref)

IT培训 admin 12浏览 0评论

Firebase云功能。无法读取未定义的属性父级(.ref)

我正在尝试将以下功能部署到Firebase。该函数可以正常部署,但是当该函数触发时,我会收到一个错误:cannot read property 'parent' of undefined。我引用父级的第一行出现错误。我在快照和快照.ref上使用了console.log,尽管存在快照,但快照.ref未定义。

我在其他云函数中使用了snapshot.ref.parent,它工作正常。此功能有两个主要区别:(a)这是一个onUpdate(我以前一直在使用onCreate和onDelete)(b)这是一个异步功能。

exports.likeRating = functions.database.ref('Ocean/{waveId}/Likes').onUpdate(async (snapshot) =>{
    let likes; let dislikes; let comments; let echoes;

    await snapshot.ref.parent.child('Dislikes').once('value').then(response=>{dislikes = response.val(); return null});
    await snapshot.ref.parent.child('Likes').once('value').then(response=>{likes = response.val(); return null});
    await snapshot.ref.parent.child('Comments').child('CommentsCount').once('value').then(response=>{comments = response.val(); return null});
    await snapshot.ref.parent.child('Echoes').once('value').then(response=>{echoes = response.val(); return null});

    snapshot.ref.parent.child('Rating').set(dislikes+likes+comments+echoes);
    return null;

}

关于我为什么会收到此错误的任何想法?感谢所有帮助。

回答如下:

[在等待一系列请求时,该函数的运行将大大慢于所需的速度,因此,您应该等待一个Promise.all([<Promises>]),而且return null也是多余的。

如果查看docs,则回调的签名为function(non-null functions.Change containing non-null functions.firestore.DocumentSnapshot, optional non-null functions.EventContext)

因此第一个参数是change,其中包含before类型的afterDocumentSnapshot,正是您应使用的那些属性,例如change.after.ref

Firebase云功能。无法读取未定义的属性父级(.ref)

我正在尝试将以下功能部署到Firebase。该函数可以正常部署,但是当该函数触发时,我会收到一个错误:cannot read property 'parent' of undefined。我引用父级的第一行出现错误。我在快照和快照.ref上使用了console.log,尽管存在快照,但快照.ref未定义。

我在其他云函数中使用了snapshot.ref.parent,它工作正常。此功能有两个主要区别:(a)这是一个onUpdate(我以前一直在使用onCreate和onDelete)(b)这是一个异步功能。

exports.likeRating = functions.database.ref('Ocean/{waveId}/Likes').onUpdate(async (snapshot) =>{
    let likes; let dislikes; let comments; let echoes;

    await snapshot.ref.parent.child('Dislikes').once('value').then(response=>{dislikes = response.val(); return null});
    await snapshot.ref.parent.child('Likes').once('value').then(response=>{likes = response.val(); return null});
    await snapshot.ref.parent.child('Comments').child('CommentsCount').once('value').then(response=>{comments = response.val(); return null});
    await snapshot.ref.parent.child('Echoes').once('value').then(response=>{echoes = response.val(); return null});

    snapshot.ref.parent.child('Rating').set(dislikes+likes+comments+echoes);
    return null;

}

关于我为什么会收到此错误的任何想法?感谢所有帮助。

回答如下:

[在等待一系列请求时,该函数的运行将大大慢于所需的速度,因此,您应该等待一个Promise.all([<Promises>]),而且return null也是多余的。

如果查看docs,则回调的签名为function(non-null functions.Change containing non-null functions.firestore.DocumentSnapshot, optional non-null functions.EventContext)

因此第一个参数是change,其中包含before类型的afterDocumentSnapshot,正是您应使用的那些属性,例如change.after.ref

发布评论

评论列表 (0)

  1. 暂无评论