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

Jan 02 2021

Эта проблема

Я использую облачные функции 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 принимает два параметра. Одинаковые результаты с обоими параметрами.
  • Функции в продакшене не пробовал, только с эмулятором.

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

Почему триггер firestore 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

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

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

Ответы

Nick Jan 04 2021 at 03:15

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

Изменено

// functions/src/index.ts

export { onMusicCreated } from './music'

к

// functions/src/index.ts

export { onMusicCreated, onMusicUpdated } from './music'