我需要检测云函数中何时仅某个字段发生更改

2024-03-06

请查看下面我的云功能。我想在仅 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 https://firebase.google.com/docs/functions/database-events#monitoring_changed_values

上面带有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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我需要检测云函数中何时仅某个字段发生更改 的相关文章

随机推荐