Эта проблема
Я использую облачные функции 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
)
Это официальные документы. Насколько я могу судить, я делаю то, что написано в документации. Хотя я мог просто упустить что-то ослепляюще очевидное.
Другие детали
- macOS Big Sur 11.1 (20C69)
- Интерфейс командной строки Firebase 9.1.0
Эмулятор должен быть обновлен.
Любые идеи? Спасибо!