기능은 proposals/{jobid}/{propid}
을 준수합니다. 새 제안이 추가되고 child("isinvitation")
이 널 (NULL)이면 함수는 proposals/sent
에 새 노드를 성공적으로 기록한 다음 작업 jobs/${jobid}
의 제안 하위에 증가분을 추가합니다.실행을 완료하기 전에 Firebase 용 클라우드 기능이 중단되었습니다.
제안이 제거되면 기능이 실패합니다. userRef.child(jobid).remove()
도 실행되지 않으며 작업 jobs/${jobid}
의 제안서 자식으로 감소하지 않습니다.
exports.CountProposals = functions.database.ref("/proposals/{jobid}/{propid}").onWrite((event) => {
const jobid = event.params.jobid;
const userId = event.params.propid;
const isinvitation = event.data.child("isinvitation").val();
if (!isinvitation) {
const userRef = admin.database().ref(`users/${userId}/proposals/sent`);
if (event.data.exists() && !event.data.previous.exists()) {
userRef.child(jobid).set({
timestamp: admin.database.ServerValue.TIMESTAMP
});
} else if (!event.data.exists() && event.data.previous.exists()) {
userRef.child(jobid).remove();
}
}
const collectionRef = admin.database().ref(`/jobs/${jobid}`);
return collectionRef.once('value').then(snapshot => {
if (snapshot.val() !== null) {
const countRef = collectionRef.child("proposals");
countRef.transaction(current => {
if (event.data.exists() && !event.data.previous.exists()) {
return (current || 0) + 1;
} else if (!event.data.exists() && event.data.previous.exists()) {
return (current || 0) - 1;
}
});
}
});
});
콘솔 로그에 오류가 표시되지 않습니다.
event.data.child ("isinvitation")에 대한 null 값을 처리하고 있습니다. 그것은 이전 값을 사용하여 나에게 의미가 없습니다. –
당신의 기능이 무엇을해야하는지는 내게 불분명하다. 당신은 주로 그것이 무엇인지 아닌지 말하는 것입니다. 또한 데이터베이스 업데이트와 같이 작동하는 함수에서 약속을 반환해야한다는 점을 명심하십시오. 지금은 업데이트 (제거, 트랜잭션)에서 반환되는 약속을 사용하고 있지 않습니다. –
이 함수는 새로운 데이터와 isinvitation = false가'users/$ {userId}/proposals/sent' 데이터베이스에서 데이터를 쓰거나 제거한 다음'/ jobs/$ {jobid}'에 제안 된 값을 증가 시키거나 감소시킵니다 –