无法执行Firestore功能

时间:2018-07-17 05:49:33

标签: node.js firebase notifications google-cloud-firestore schedule

我已经在Firebase功能上创建了服务器,现在我正在此功能上创建Schedule通知。但是此函数被调用,但不会触发或执行。请帮助如何使用节点JS执行此基于时间的功能。

var date = new Date(2018, 6, 17, 10, 50);

    exports.newEvent = functions.firestore.document("Events/{event_id}").onWrite((change, context) => {

         console.log('event id', context.params.event_id);
        // console.log('Join_event id', context.params.event_id);
         const id = context.params.event_id;

         return admin.firestore().collection("Events").doc(id).get()
        .then(queryResult =>{

             const uid=queryResult.data().user;
             console.log("User id from event",uid);
             const da=queryResult.data().date;
             console.log("User id from event",da);
        const req = context.params.event_id;

    schedule.scheduleJob(date, function(){

        console.log('running every 2 minute');
        console.log(id);
        return admin.firestore().collection("Events").doc(id).get()
       .then(queryResult =>{

            const uid=queryResult.data().user;
            console.log("User id from event",uid);

              return admin.firestore().collection("User_data").doc(uid).get()
               .then(snapshot2 =>
                 {
                  const tid3=snapshot2.data().token_id;
                  const useremail =snapshot2.data().user_email;
                  const username =snapshot2.data().user_firstname;


                  console.log(" User Name: ", username);
                  console.log(" User Email: ", useremail);
                  console.log(" Token_id: ",tid3);



                      const payload3 = {
                          notification:{
                              title:username,
                              body:"Event test notifiction",
                              icon: "default"
                            }
                      };
                      console.log(payload3);
                      const options4 = {
                            priority: "high",
                            timeToLive: 60 * 60 *24,
                            content_available: true,
                           };
                        return admin.messaging().sendToDevice(tid3, payload3,options4).then(result => {
                            return console.log('Notify when event time changed');
                        });
          });
         });

     });
     return true;
    });
     });

我已经创建了演示功能。它准时调用并成功打印日志。

谢谢

1 个答案:

答案 0 :(得分:1)

首先,Cloud函数的执行时间限制为60秒,之后该函数实例将不会执行,因此您的cron作业将不会运行。

第二,您正在使用admin sdk在同一节点上的Firestore功能中从Firestore读取数据。您在change变量中有数据。在此处查看firebase文档:https://firebase.google.com/docs/functions/firestore-events

此外,FCM不支持以后的交货。

对于您的情况,您需要自己的节点服务器,该服务器正在侦听所需的路径。