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); 
      }); 
    }); 
}); 
+0

오류를 재현하는 데 필요한 최소한의 코드를 게시하십시오. – Zack

답변

0

요청이 생성 될 때만 클라우드 기능을 시작하기를 원합니다. 당신은 onCreate에 등록하여 해당 작업을 수행 할 수 있습니다

exports.sendFreindRequestNotification = functions.database.ref('/users/{pushId}') 
.onCreate(event => { 

자세한 내용은 documentation on setting event handlers를 참조하십시오.