【问题标题】:Conditionals within Firebase FunctionsFirebase 函数中的条件
【发布时间】:2019-06-02 15:10:28
【问题描述】:

这适用于在 Firebase 函数 (node.js) 中使用条件。当谈到 Javascript 时,我是一个完全的菜鸟,所以请多多包涵。我正在尝试根据所订购食物的类别发送具有不同有效负载(声音)的推送通知。我尝试了以下代码,但未发送任何通知。如果我删除了 if-else 条件,则会发送通知。不知道我做错了什么。代码编译得很好。多谢你们。日志显示“ReferenceError:未定义有效负载 在 admin.database.ref.once.then.allToken (/user_code/index.js:60:58) 在 process._tickDomainCallback (internal/process/next_tick.js:135:7)"

exports.sendRequestNotification = functions.database.ref('/Requests/{id}').onCreate((snap, context) => {

    const snapShot = snap.val();
    console.log(snapShot);


     if (snap.child("RequestItemCategory").val() === 1) {
     const payload = {
        notification: {
            title: 'Food Ordered',
            body: 'Seat Number: ' + snap.child("Seat").val() + '   Request Item: ' + snap.child("RequestItem").val(),
            sound: 'food.wav'
        }
       };
     } else {     
     const payload = {
         notification: {
            title: 'New Request Received',
            body: 'Seat Number: ' + snap.child("Seat").val() + '   Request Item: ' + snap.child("RequestItem").val(),
            sound: 'drinks.wav'
       }
      };
     }

    return admin.database().ref('/Tokens').once('value').then(allToken => {
        const token = Object.keys(allToken.val());
        console.log(token);
            return admin.messaging().sendToDevice(token, payload)
    });

}); 

【问题讨论】:

  • @Frank van Puffelen。感谢您的编辑。我从日志中添加了错误消息。希望它会有所帮助。

标签: javascript firebase firebase-cloud-messaging google-cloud-functions firebase-admin


【解决方案1】:

一个 const 只在它被声明的块中可见。您正在声明两个不同的 const 有效负载变量嵌入在您尝试使用它的地方无法访问的块中。您需要像这样声明它:

let payload;

if (...) {
    payload = ...
} else {
    payload = ...
}

然后您可以在条件之后立即使用有效负载,因为它将在您调用管理 SDK 的范围内。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 2018-06-29
    • 2018-10-16
    • 2021-11-27
    相关资源
    最近更新 更多