Firebase Onwrite的云功能不会触发任何执行

时间:2018-07-11 05:19:30

标签: javascript firebase google-cloud-functions

exports.editData = functions.database.ref('/AllData/hello/A').onWrite((change, context) => {
    const after = change.after;
    if (after.exists()) {
        const data = after.val();
        var value = data;
        // set of data to multiply by turns ratio
        var actualEIn = (value.ein)*200;
        console.log('Data Edited');
    }
    return admin.database().ref('/editedData/hello/A').push({
        ein: actualEIn,
    });
});

编辑:根据建议对代码进行一些编辑!但是,当我部署它时,实际上没有日志。 No logs

3 个答案:

答案 0 :(得分:2)

更改此:

exports.editValues = functions.database.ref('/AllData/hello/A').onWrite((snapshot) => {
const data = snapshot.val();
if (data.exists()) {

对此:

exports.editValues = functions.database.ref('/AllData/hello/A').onWrite((change,context) => {
const data = change.after.val();
if (data.exists()) {

更多信息在这里:

https://firebase.google.com/docs/functions/beta-v1-diff#realtime-database

答案 1 :(得分:1)

exports.editData = functions.database.ref('/AllData/hello/A/{id}').onWrite((change, context) => {
    const afterData = change.after;
    if (afterData.exists()) {
        console.log('hey');
        const data = afterData.val();
        // set of data to multiply by turns ratio
        var actualEIn = (data.ein)*200;
    }
    return admin.database().ref('/editedData/hello/A').push({
        ein: actualEIn,
    });
});

大家好,感谢您的帮助! :)我设法通过在后面添加一个/ {id}来解决这个问题!

答案 2 :(得分:0)

您在这里有两件事错了。

首先,从1.0版开始,较新版本的firebase-functions SDK将Change对象传递给onWrite处理程序,而不是您期望的快照。 Change对象具有beforeafter的属性,其中DataSnapshot对象具有触发该函数的更改前后的数据库内容。 Please read the documentation for database triggers获取所有信息。

第二,exists()DataSnapshot上的一种方法,但是您正在使用它对数据库内容的原始JavaScript对象值的位置进行更改。来自val()的JavaScript对象将没有任何调用方法。

您可能应该将代码更新为:

  1. 使用最新版本的firebase-functions模块
  2. 更改您的函数以接受Change对象而不是快照
  3. 对更改中的快照而不是原始JavaScript对象使用exist()方法。

入门代码:

exports.editValues = functions.database.ref('/AllData/hello/A').onWrite((change) => {
    const after = change.after;  // the DataSnapshot of the data after it was changed
    if (after.exists()) {
        const data = after.val()  // the raw JavaScript value of the location
        // use data here
    }
})