Вам необходимо изменить порядок ваших if
операторов.
// Called onUpdate, a snapshot exists before the update and exists after the update
// Called onDeletion, a snapshot exists before the update and doesn't exist after the update
if (snapshot.before.exists()) {
// Called onDeletion, nothing exists after operation
if (!snapshot.after.exists()) {
// Called onCreate. Nothing existed `before`, but it does now
if (!snapshot.before.exists()) {
Поскольку вы возвращаетесь в каждом блоке, ваше выполнение останавливается после первого блока даже при удалении.Я думаю, что если вы поменяете местами первые два блока, все будет работать так, как ожидалось:
// Called onDelete, nothing exists after operation
if (!snapshot.after.exists()) {
// Called onUpdate, a snapshot exists before the update and exists after the update
// Called onDelete, a snapshot exists before the update and doesn't exist after the update
// Since you've moved a "better" `onDelete` above this, this function will now only be called for onUpdate
if (snapshot.before.exists()) {
// Called onCreate. Nothing existed `before`, but it does now
if (!snapshot.before.exists()) {
Примечание: вам не нужен последний оператор if
, так как предыдущие два будут ловить delete
иupdate
операций, последний - единственный путь, по которому может идти ваш код.Вот мой взгляд на все это:
exports.onPostWrite = functions
.database
.ref('/posts/{postId}')
.onWrite((snapshot, context) => {
const index = client.initIndex(ALGOLIA_INDEX_POSTS);
// no snapshot.before.exists(), post has been created
if (!snapshot.before.exists()) {
const post = snapshot.after.val();
post.objectID = context.params.postId;
console.log('Creating post ', post.objectID);
return index.saveObject(post);
}
const post = snapshot.before.val();
post.objectID = context.params.postId;
// no snapshot.after.exists(), post has been deleted
if (!snapshot.after.exists()) {
console.log('Deleting post ', post.objectID);
return index.deleteObject(post.objectID);
}
// snapshot.before.exists() AND snapshot.after.exists(), post has been updated
console.log('Updating post ', post.objectID);
return index.saveObject(post);
});