gpt4 book ai didi

javascript - firebase函数onwrite的值有时为null

转载 作者:行者123 更新时间:2023-12-01 01:09:59 25 4
gpt4 key购买 nike

我正在尝试实现 Android 订购系统,并且正在使用实时数据库。为了发送通知,我在 JavaScript 中使用 Firebase 函数。

每个用户及其 ID、发送通知的 token 以及其他数据都存储在数据库中。 我想做的是检测用户何时收到订单并向他们发送通知

问题出现在这里。 在某些情况下会发送通知,而在其他情况下不会发送。查看“sendNotif”函数的日志,我发现错误是这样的:

TypeError: Cannot read property 'idcomprador' of null
at exports.sendNotif.functions.database.ref.onWrite (/user_code/index.js:133:32)
at Object.<anonymous> (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:112:27)
at next (native)
at /user_code/node_modules/firebase-functions/lib/cloud-functions.js:28:71
at __awaiter (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:24:12)
at cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:82:36)
at /var/tmp/worker/worker.js:827:24
at process._tickDomainCallback (internal/process/next_tick.js:135:7)

我的代码:

exports.sendNotif = functions.database.ref('/Usuarios/{vendedorId}/Solicitudes/Venta/{pushId}').onWrite((change, context) => {

// Grab the current value of what was written to the Realtime Database.
const solicitud = change.after.val();
const compradorId = solicitud.idcomprador
const pedidoId = solicitud.idpedido
const vendedorId = solicitud.idvendedor
var solicitudTokens = [vendedorId];

// Notification details.
const payload = {
notification: {
title: `Order`,
body: `order`,
icon: 'photoURL',
tag: 'solicitudventa',
sound: 'default',
clickAction: 'ACTIVITY_ORDER',
badge: '2'
},
data: {
extra: 'extra_data',
},
};

const options = {
collapseKey: 'demo',
contentAvailable: true,
priority: 'high',
timeToLive: 60 * 60 * 24,
};


var ref = admin.database().ref(`Usuarios/${vendedorId}/token/result/token`);
return ref.once("value", function(snapshot){


admin.messaging().sendToDevice(snapshot.val(), payload)

},
function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
});

第 133 行是这样的:const compradorId = solicitud.idcomprador。我不明白为什么有时有效有时无效。

最佳答案

onWrite 将触发与触发器位置匹配的任何更改。这意味着它将触发任何创建、更新或删除。

当触发事件是创建新数据时,change.before 将是未定义的(之前没有数据),并且 change.after 将包含快照.

当触发事件是删除数据时,change.before将包含快照,而change.after将是未定义的。

您的代码盲目地假设 change.after 包含快照。删除数据完全有可能触发您的函数,但它失败了,因为这不是它设计处理的目的。

使用 onWrite 时,您有义务检查这种情况并进行适当处理。如果您不关心删除事件,请考虑使用 onCreate 来捕获新数据。

关于javascript - firebase函数onwrite的值有时为null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55250888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com