回答

2

当然是值得的!拆分您的功能将使您的功能缩短,清晰和更快。您也将避免无限呼叫DatabaseTriggers以最终应用return。最后,您将支付您应用程序正在使用的触发器的数量,因此您应该尽量避免无用的电话以节省资金!

实现它在你的云功能,首先你需要更新哟你firebase-functions版本上的package.json你的函数里面folder并将其升级为0.5.9至少。

关于如何使用每个触发器,让我们看看onWrite的例子,它可以被分割。

function检查时,一个新的comment是所著上的具体reference,如果它已经被添加基于,deleted,或updated它加1减1或者什么都不做:

exports.countComments = functions.database.ref('/workoutPosts/{workoutId}/info/comments/{commentId}').onWrite(event => { 
    const workoutId = event.params.workoutId; 

    //Comment created 
    if (event.data.exists() && !event.data.previous.exists()) { 
     return database.ref(`/workoutPosts/${workoutId}/meta/commentsCount`).transaction(addPrivateWorkout => { 
      return (addPrivateWorkout || 0) + 1; 
     }); 
     //Comment deleted 
    } else if (!event.data.exists() && event.data.previous.exists()) { 
     return database.ref(`/workoutPosts/${workoutId}/meta/commentsCount`).transaction(deletePrivateWorkout => { 
      return (deletePrivateWorkout || 0) - 1;     
     }); 
     //Comment updated 
    } else if (event.data.exists() && event.data.previous.exists()) { 
     return 
    } 
}; 

每次更新调用将是一个无用的电话,而且是资源的浪费。我们如何使这更容易?使用新的分裂云功能:

exports.countCommentsOnCreate = functions.database.ref('/workoutPosts/{workoutId}/info/comments/{commentId}').onCreate(event => { 
    const workoutId = event.params.workoutId; 
     return database.ref(`/workoutPosts/${workoutId}/meta/commentsCount`).transaction(addPrivateWorkout => { 
      return (addPrivateWorkout || 0) + 1; 
     });  
}); 

exports.countCommentsonDelete = functions.database.ref('/workoutPosts/{workoutId}/info/comments/{commentId}').onDelete(event => { 
    const workoutId = event.params.workoutId; 

     return database.ref(`/workoutPosts/${workoutId}/meta/commentsCount`).transaction(deletePrivateWorkout => { 
      return (deletePrivateWorkout || 0) - 1; 
     }); 
}); 

查看更详细的例子和阅读关于接下来的文章中这一新功能:https://firebase.googleblog.com/2017/07/cloud-functions-realtime-database.html