javascript - 我需要检测我的云函数中何时只有某个字段发生了变化

标签 javascript firebase google-cloud-functions

在下面查看我的云功能。我想在 Job/{jobId} 中的状态字段发生变化时做一些事情,然后在 Job/{jobId} 中的任何其他字段发生变化时做一些其他事情,所以我在下面创建了两个函数。但似乎当状态字段发生变化时,这两个函数都会触发。我该如何限制这种行为。

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

//-----
const db = functions.database;
const adminDb = admin.database();
//-----


//JOBS
exports.onJob = db
    .ref("/Jobs/{jobId}")
    .onWrite((event) => {

        //...my codes

    });



exports.onJobStatus = db
    .ref("/Jobs/{jobId}/status")
    .onWrite((event) => {

   //...my codes

    });

最佳答案

您可以将节点的先前状态 (event.data.previous) 与当前状态 (event.data) 进行比较。

所以你可以检查是否只有状态字段发生了变化,然后触发一些代码。

例如,假设您的节点中还有“name”和“jobDate”字段。 函数开头的条件语句可能如下所示:

let statusHasChanged = false;
let otherFieldsHaveChanged = false;

if (event.data.previous.val().status !== event.data.val().status) {
  //status has changed
  statusHasChanged = true;
}

//check other fields
  if ((event.data.previous.val().name !== event.data.val().name) 
   || (event.data.previous.val().jobDate !== event.data.val().jobDate) {
  //at least one other field has changed
  otherFieldsHaveChanged = true;
}

//now I know exactly what has changed and what to do next !!!

然后您可以使用结果来运行您想要的代码。

您还可以使用 .changed() 函数来检查字段是否已更改(如果您不需要知道发生了什么更改),请参阅 docs

上面带有 changed() 函数的示例可能如下所示:

let eventSnapshot = event.data;
let statusSnapshot = eventSnapshot.child('status');
let nameSnapshot = eventSnapshot.child('name');
let jobDateSnapshot = eventSnapshot.child('jobName');

let statusHasChanged = false;
let otherFieldsHaveChanged = false;

if (statusSnapshot.changed()) {
  //status has changed
  statusHasChanged = true;
}

//check other fields
  if (nameSnapshot.changed() || jobDateSnapshot.changed())  {
  //at least one other field has changed
  otherFieldsHaveChanged = true;
}

关于javascript - 我需要检测我的云函数中何时只有某个字段发生了变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44853515/

相关文章:

javascript - Firebase 数据库以编程方式检查下载的数据大小

ios - Firestore线程1 : Fatal error when loading data to tableview using real time listener (Swift 4)

Android Firebase 将多个帐户提供商与匹配的电子邮件链接起来

Firebase Cloud Functions 使用 API key 保护 HTTPS 端点

python - 使用 WSO2 保护 Google Cloud Functions

javascript - 单击按钮时输入框值消失

javascript - 是否有可能为 `goog.debug.Logger` 获得更好的输出(如 `console.log` )?

javascript - 使用 scroll-spy 更改导航栏背景类

javascript - jQueryMobile 和 javascript 文件包含 : potential risks

node.js - 如何从 Cloud Firestore 数据库获取 node.js 中的特定字段值?