0
요청을 보내면 시작되는 친구 요청 기능이 있지만 사용자가 요청을 거부하면 onWrite
이 다시 발생합니다. firebase db의 요청 노드가 제거되면 어떻게 약속을 반환 할 수 있습니까?Firebase 데이터베이스 onWrite에 대한 클라우드 기능 요청이 제거 된 후 두 번 트리거 됨
exports.sendFreindRequestNotification = functions.database.ref('/users/{pushId}')
.onWrite(event => {
let friendRequest = event.data.current.val();
let senderUid = friendRequest.requests;
let receiverUid = friendRequest.uid;
let promises = [];
for (key in senderUid) {
console.log('my Key', key);
}
//Some kind of logic to return the the promise if the friend request value is removed from firebase db to avoid firing again.
if (receiverUid == key) {
return Promise.all(promises);
}
let getInstanceIdPromise = admin.database().ref(`/users/${receiverUid}/pushToken`).once('value');
let getSenderUidPromise = admin.auth().getUser(key);
return Promise.all([getInstanceIdPromise, getSenderUidPromise]).then(results => {
let instanceId = results[0].val();
let sender = results[1];
console.log('notifying ' + receiverUid + ' about ' + friendRequest.displayName + ' from ' + key);
console.log('Sender ', sender);
let payload = {
notification: {
body: 'You have a new friend request from ' + sender.email,
sound: 'default'
},
'data': {
'notificationType': "friendRequest"
}
};
admin.messaging().sendToDevice(instanceId, payload)
.then(function (response) {
console.log("Successfully sent message:", response);
})
.catch(function (error) {
console.log("Error sending message:", error);
});
});
});
오류를 재현하는 데 필요한 최소한의 코드를 게시하십시오. – Zack