Функция Firestore onUpdate не запускается

Эта проблема

Я использую облачные функции Firebase с эмулятором, и по какой-то причине триггер onUpdate не срабатывает, но функция onCreate запускается.

Весь код - это TypeScript, и он переносится на JS для работы с облачными функциями.

// functions/src/music.ts

// this function runs
export const onMusicCreated = functions.firestore
    .document('music/{musicId}')
    .onCreate(async (snapshot) => {
        console.log('on create is running')
    })

// this function doesn't run
export const onMusicUpdated = functions.firestore
    .document('music/{musicId}')
    .onUpdate(async (change) => {
        console.log('on update is running')
    })

Обе функции являются асинхронными, потому что в окончательном коде

На интерфейсе, когда я запускаю функцию add на интерфейсе, срабатывает функция onCreate.

const { id } = await firebase.firestore().collection('music').add({ title: 'hello world' })

Журнал консоли работает должным образом, и эмулятор выводит это в консоль:

i  functions: Beginning execution of "onMusicCreated"
i  functions: Finished "onMusicCreated" in ~1s

Но когда я обновляю тот же документ, функция onUpdate не запускается.

// "id" is the same id as above
await firebase.firestore().doc(`music/${id}`).update({ title: 'new title' })

Ничего не произошло. Я могу подтвердить, что документ действительно обновлен, когда смотрю в эмулятор firestore. Я упускаю что-то очевидное? Код внешнего интерфейса упрощен по сравнению с тем, что я использую на самом деле, но код функций совсем не упрощен. И я могу подтвердить, что документ firestore создан и обновлен, как я и ожидал.

Нет сообщений об ошибках в консоли или журналах.

Шаги отладки

  • Я проверил, правильно ли был перенесен код функций в JS. Я позаботился о том, чтобы посмотреть на вывод кода, а также несколько раз обновил код onCreate, чтобы убедиться, что эта функция обновляется.
  • Я выдал весь свой код внутри функций (как показано выше), поэтому я могу подтвердить, что сама функция не работает.
  • Технически функция onUpdate принимает два параметра. Одинаковые результаты с обоими параметрами.
  • Функции в продакшене не пробовал, только с эмулятором.

Похожие сообщения

Почему триггер onWrite не получает вызывается в эмуляторе облачных функций firebase?

Я не использую запрещенные символы в селекторе документов или, по крайней мере, не получаю это сообщение об ошибке.

Облачные функции Firebase для Firestore не запускаются

Используя функции 3.11.0, и эти функции являются асинхронными, поэтому они должны неявно возвращать Promise. Результаты такие же, когда явным образом возвращается значение (например, return 0)

https://firebase.google.com/docs/functions/firestore-events#trigger_a_function_when_a_document_is_updated

Это официальные документы. Насколько я могу судить, я делаю то, что написано в документации. Хотя я мог просто упустить что-то ослепляюще очевидное.

Другие детали

  • macOS Big Sur 11.1 (20C69)
  • Интерфейс командной строки Firebase 9.1.0

Эмулятор должен быть обновлен.

Любые идеи? Спасибо!


person Nick    schedule 01.01.2021    source источник


Ответы (1)


Оказывается, я просто забыл импортировать onMusicUpdated в файл функций index.ts. Следовательно, эмулятор никогда не знал о его существовании!

Измененный

// functions/src/index.ts

export { onMusicCreated } from './music'

to

// functions/src/index.ts

export { onMusicCreated, onMusicUpdated } from './music'
person Nick    schedule 03.01.2021