我得到重复的结果,因为 nodejs 在发送 200 响应之前将其判断为发送失败
I'm getting duplicate results because nodejs judges it as a send failure before even sending a 200 response
当应用参与奖励活动时,奖励服务器将结果发送给应用服务器。如果没有200响应,奖励公司服务器一定时间重复发送结果。
如果应用服务器没有响应200,奖励服务器重复发送结果。
记录所有获得的积分。查看是否有事件ID的点记录,如果没有点记录,则记录点数,并响应200。问题是,即使在第一个200响应之前,就判断为传输失败,结果再次发送,因此具有相同事件 ID 的多个点正在累积。
我该怎么办?有没有办法在应用服务器上处理这个问题?
db.collection('pointHistory').doc(uid).collection('pointHistory').add(newPointHistory).then(ref => {
db.collection('users').doc(uid).update({point: addTotalPoint});
db.collection('offerwallHistory').doc(uid).collection('offerwallHistory').add(offerwallHistory_data);
db.collection('adminPointHistory').add(adminPointHistory_data);
setDailyPointStatus(reward, 12);
setOtherPersonalPointStatus(reward, uid, "dailyPersonalPointStatus");
setOtherPersonalPointStatus(reward, uid, "weeklyPersonalPointStatus");
setOtherPersonalPointStatus(reward, uid, "monthlyPersonalPointStatus");
return res.send(event_id + ":OK").status(200);
}).catch(err => {
console.log(err);
return null;
});
return res.send(event_id + ":OK").status(200);
是的,你做错了。
您使用的 promise(then/catch) 不会等待所有过程完成。
您应该尝试更多地了解 async / await 以使您的代码更清晰和可读,并且您可以像刚才一样使用它但没有 return return res.send(event_id + ":OK").status(200);在末尾。
例如:
try {
await db.collection('pointHistory').doc(uid).collection('pointHistory').add(newPointHistory)
await db.collection('users').doc(uid).update({point: addTotalPoint});
db.collection('offerwallHistory').doc(uid).collection('offerwallHistory').add(offerwallHistory_data);
db.collection('adminPointHistory').add(adminPointHistory_data);
setDailyPointStatus(reward, 12);
setOtherPersonalPointStatus(reward, uid, "dailyPersonalPointStatus");
setOtherPersonalPointStatus(reward, uid, "weeklyPersonalPointStatus");
setOtherPersonalPointStatus(reward, uid, "monthlyPersonalPointStatus");
return res.send(event_id + ":OK").status(200);
} catch(error) {
return null;
}
您需要像这样包装函数:
async function myFunc() {}
当应用参与奖励活动时,奖励服务器将结果发送给应用服务器。如果没有200响应,奖励公司服务器一定时间重复发送结果。
如果应用服务器没有响应200,奖励服务器重复发送结果。
记录所有获得的积分。查看是否有事件ID的点记录,如果没有点记录,则记录点数,并响应200。问题是,即使在第一个200响应之前,就判断为传输失败,结果再次发送,因此具有相同事件 ID 的多个点正在累积。
我该怎么办?有没有办法在应用服务器上处理这个问题?
db.collection('pointHistory').doc(uid).collection('pointHistory').add(newPointHistory).then(ref => {
db.collection('users').doc(uid).update({point: addTotalPoint});
db.collection('offerwallHistory').doc(uid).collection('offerwallHistory').add(offerwallHistory_data);
db.collection('adminPointHistory').add(adminPointHistory_data);
setDailyPointStatus(reward, 12);
setOtherPersonalPointStatus(reward, uid, "dailyPersonalPointStatus");
setOtherPersonalPointStatus(reward, uid, "weeklyPersonalPointStatus");
setOtherPersonalPointStatus(reward, uid, "monthlyPersonalPointStatus");
return res.send(event_id + ":OK").status(200);
}).catch(err => {
console.log(err);
return null;
});
return res.send(event_id + ":OK").status(200);
是的,你做错了。 您使用的 promise(then/catch) 不会等待所有过程完成。 您应该尝试更多地了解 async / await 以使您的代码更清晰和可读,并且您可以像刚才一样使用它但没有 return return res.send(event_id + ":OK").status(200);在末尾。 例如:
try {
await db.collection('pointHistory').doc(uid).collection('pointHistory').add(newPointHistory)
await db.collection('users').doc(uid).update({point: addTotalPoint});
db.collection('offerwallHistory').doc(uid).collection('offerwallHistory').add(offerwallHistory_data);
db.collection('adminPointHistory').add(adminPointHistory_data);
setDailyPointStatus(reward, 12);
setOtherPersonalPointStatus(reward, uid, "dailyPersonalPointStatus");
setOtherPersonalPointStatus(reward, uid, "weeklyPersonalPointStatus");
setOtherPersonalPointStatus(reward, uid, "monthlyPersonalPointStatus");
return res.send(event_id + ":OK").status(200);
} catch(error) {
return null;
}
您需要像这样包装函数:
async function myFunc() {}