Firebase函数尝试发送通知失败

时间:2018-10-25 23:02:06

标签: javascript firebase google-cloud-functions

我正在尝试做以下事情。我有这样的数据库

clients
|___clientnumber: 4
|___name1
    |_device_token: kJ-aguwn7sSHsjKSL....
    |_notificationtrigger: 8

我想做的是,当客户端在我的应用程序的节点“ name1”中放置一个数字时,当clientnumber为8时,它将触发通知,因此,客户端编号将为4、5、6。直到8点,当它达到8时,我编写了此函数,以便向用户发送通知,告知他8号客户端已准备就绪。

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.sendClientesNotification = functions.database.ref('/clients/clientnumber')
    .onWrite((snapshot, context) => {

        const newClient = snapshot.after.val();
        const oldClient = snapshot.before.val();
        console.log('New client: '+newClient);
        console.log('Old client: '+oldClient);

            // get the user device token
      const getDeviceTokensPromise = admin.database()
      .ref(`/clients/name1/device_token`).once('value');

      const getClientNotificationTrigger = admin.database()
      .ref(`/clients/name1/notificationtrigger`).once('value');


      //I use a promise to get the values above and return, and then I create the notification
      return Promise.all([getDeviceTokensPromise, getClientNotificationTrigger]).then(results => {

        const devicetoken = results[0].val();
        const clientNumberTrigger = results[1].val();

        console.log('New notification for '+devicetoken+' for the number '+clientNumberTrigger);

        if(clientNumberTrigger = newClient){
            const payload = {
                notification: {
                    title: "Alert",
                    body: "alert triggered",
                    icon: "default",
                    sound:"default",
                    vibrate:"true"
                }
            };
        }

        return admin.messaging().sendToDevice(devicetoken, payload);

      });

    });

现在,我将在这里解释我在做什么。

首先,我指向参考客户端编号,并成功获取此处更改前后的值

 const newClient = snapshot.after.val();
            const oldClient = snapshot.before.val();
            console.log('New client: '+newClient);
            console.log('Turno anterior: '+oldClient);

然后我要在客户端中查询值,以便具有 device_token notificationtrigger ,并使用诺言获得这两个值,比较它们是否相同然后使用当前用户device_token返回通知

我面临的错误是这两个

enter image description here

我认为这是第一行

const clientNumberTrigger = results[1].val();

第二个我不知道为什么会发生,我认为我需要在if语句之前添加一个条件表达式

我从Firebase函数开始,并在此过程中慢慢学习一些JavaScript。

1 个答案:

答案 0 :(得分:2)

如错误所示:您正在尝试使用单个等号(=)比较两个值,而应改用三个:

切换此:

if(clientNumberTrigger = newClient) { ... }

对此:

if(clientNumberTrigger === newClient) { ... }

并且至少应该消除此错误。