请查看下面我的云功能。我想在仅 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(使用前将#替换为@)