使用Cloud Functions将数据写入Firestore

时间:2019-03-09 18:28:58

标签: node.js firebase google-cloud-firestore google-cloud-functions

我添加了一个触发器,该触发器在将新记录添加到指定路径时都有效。

我的代码:

exports.modifyNewForm = functions.firestore
    .document('users/{userId}/form_fillers/{filler}/forms/{form_id}')
    .onCreate((snap, context) => {
      const newValue = snap.data();


      const first_name = "James";
      const last_name =  "Alex";
      const newPhone = 100;

    // Parameters
      const userId = context.params.userId;
      const filler_1 = context.params.filler;
      const form_id = context.params.form_id;

    const userRef = admin.firestore().collection('users').doc(userId).collection("form_fillers").doc(filler_1);

     console.log("new form" + newValue)

 return userRef.get().then(parentSnap => {
        const user = parentSnap.data();
        const phone = user.phone
    if(typeof phone === "undefined") {
                 console.log("OP 1 executed");

              return admin.firestore().collection('users').doc(userId).collection('form_fillers').doc(filler_1).set({first_name:first_name, last_name:last_name,phone:newPhone}, {merge: true}).then(writeResult => {
        console.log("New write: " + writeResult);
    });

        } else {

             console.log("OP 2 executed");

             return admin.firestore().collection('users').doc(userId).collection('form_fillers').doc(filler_1).set({first_name:first_name, last_name:last_name,phone: user.phoneID}, {merge: true}).then(writeResult => {
        console.log("New write: " + writeResult);
    });

        } 
    }); 

});

好的,在这段代码中,我正在尝试实现这一点:

  1. 无论何时添加新表格,该函数都会触发✅
  2. 读取filler数据并检查是否有电话号码,我已使用typeof检查Firestore中是否存在该字段,如果没有。将filler的电话号码设置为100。但是,如果存在,请使用新提交的phoneID
  3. 表单字段进行更新

什么不起作用:

  1. 此代码一直运行到console.log("new form" + newValue)行,以下if的任何语句我都无法得到打印。日志中没有OP 1 executedOP 2 executed
    1. 我的数据库中有一个phone字段,值为0,是随机生成的。

我是JS的新手,感谢您的帮助

1 个答案:

答案 0 :(得分:1)

看起来像您的“ userRef.get()”承诺在某种程度上失败了。您可以在末尾添加一个catch并在那里进行控制台登录以查看错误所在,例如:

return userRef.get().then(
   ...
)
.catch(
  error => console.log('The error is:', error)
);