我得到重复的结果,因为 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() {}