我正在使用Swift,Firebase和Nodejs构建一个iOS Messenger应用。
我的目标:
每当用户发送消息并将消息数据(例如senderId,receiverId,messageText)写入节点(/ messages / {pushId} /)内的Firebase数据库时,我都想使用一种事务处理方法使消息计数增加1 Firebase向接收方用户提供并显示通知。
我到目前为止取得的进展和我面临的问题:
我已经使用事务方法成功地增加了消息计数(totalCount),但是我无法在事务结果内部获取值(这是函数log的图像)
我想在快照中获取“ value_:1”(这是增加的消息数),并将其放入徽章参数。
exports.observeMessages = functions.database.ref('/messages/{pushId}/')
.onCreate((snapshot, context) => {
const fromId = snapshot.val().fromId;
const toId = snapshot.val().toId;
const messageText = snapshot.val().messageText;
console.log('User: ', fromId, 'is sending to', toId);
return admin.database().ref('/users/' + toId).once('value').then((snap) => {
return snap.val();
}).then((recipientId) => {
return admin.database().ref('/users/' + fromId).once('value').then((snaps) => {
return snaps.val();
}).then((senderId) => {
return admin.database().ref('/user-messages/' + toId + '/totalCount').transaction((current) => {
return (current || 0) + 1
}).then((readCount) => {
console.log('check readCount:', readCount);
var message = {
data: {
fromId: fromId,
badge: //I want to display the message count here
},
apns: {
payload: {
aps: {
alert: {
title: 'You got a message from ' + senderId.username,
body: messageText
},
"content-available": 1
}
}
},
token: recipientId.fcmToken
};
return admin.messaging().send(message)
}).then((response) => {
console.log('Successfully sent message:', response);
return response;
})
.catch((error) => {
console.log('Error sending message:', error);
//throw new error('Error sending message:', error);
})
})
})
})
有人知道该怎么做吗? 提前致谢。
答案 0 :(得分:1)
transaction()的API文档建议,来自交易的promise将接收一个具有属性snapshot
的对象,该对象带有在交易位置写入的数据的快照。所以:
admin.database.ref("path/to/count")
.transaction(current => {
// do what you want with the value
})
.then(result => {
const count = result.snapshot.val(); // the value of the count written
})