snapshot.numChildren не является функцией в триггере базы данных реального времени - PullRequest
0 голосов
/ 05 мая 2018

Я использую облачные функции Google в своем приложении Firebase. У меня есть метод подсчета комментариев в сообщении и обновления свойства с именем comments_count в сообщении.

Работало очень хорошо, пока я не обновил консоль FireBase и ее зависимости. Теперь в журнале написано commentSnapshot.numChildren is not a function

Код в функции выглядит примерно так:

  //Function that updates comments count inside post
  exports.setCommentsCount =
      functions.database.ref('/Comments/{post_id}').onWrite((commentSnapshot, context) => {

        const post_id = context.params.post_id;
        const commentsCount = commentSnapshot.numChildren();

        //rest of code here
  }

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Я столкнулся с той же ошибкой. Вы получаете эту ошибку, потому что numChildren() является интерфейсом DataSnapshot, но снимок не является DataSnapshot. Вот правильный код:

'use strict';
const functions = require('firebase-functions');

const MAX_USERS = 10;

exports.truncate = functions.database.ref('/chat').onWrite((change) => {
  const parentRef = change.after.ref;
  const snapshot = change.after

  if (snapshot.numChildren() >= MAX_USERS) {
    let childCount = 0;
    const updates = {};
    snapshot.forEach((child) => {
      if (++childCount <= snapshot.numChildren() - MAX_USERS) {
        updates[child.key] = null;
      }
    });
    // Update the parent. This effectively removes the extra children.
    return parentRef.update(updates);
  }
  return null;
});
0 голосов
/ 05 мая 2018

Вам следует ознакомиться с критическими изменениями , произошедшими в версии 1.0 Триггеров облачных функций для Firebase SDK для базы данных реального времени.

Триггеры

onWrite больше не получают DeltaSnapshot в качестве первого аргумента предоставляемой вами функции. Теперь это объект Change со свойствами before и after, каждое из которых является объектом DataSnapshot . Этот DataSnapshot имеет метод numChildren:

functions.database.ref('/Comments/{post_id}').onWrite((change, context) => {
    const post_id = context.params.post_id;
    const commentsCount = change.after.numChildren();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...