我在Node.js上有应用,使用Express作为API路由,使用MongoDB作为DB。我有个抽奖。用户只需参加一次抽奖。我目前在内存中使用一个参与数组,但是如果您同时向API发出两个请求,用户将被抽奖两次。我怎么能不允许参加抽奖超过一次?
发布于 2016-08-07 23:16:22
您需要构造您的工作流以支持幂等操作。也就是说,执行两次相同的操作不会改变结果。
例如,增量变量不是幂等函数,因为调用增量函数两次会导致变量增加两次(例如,两次调用x++将导致将2添加到x)。我认为这是您当前设计的精髓,您在其中提到:“如果您同时对API提出两个请求,用户将参与两次抽奖”。
幂等运算的一个例子是将变量设置为值。例如,多次调用var x = 1只会导致将值1分配给x。无论您调用这一行多少次,x始终是1。
帮助您入门的一些资源:
发布于 2016-08-07 19:22:33
您可能应该将数组存储在mondodb中,如果节点重新启动,您不希望松开这个列表。
关于“连接两次”问题,只需节流向API发出请求的客户端函数,以便在您的油门函数传递的时间内只能调用一次。
实例节气门功能:
function throttle (callback, limit) {
var wait = false;
return function () {
if (!wait) {
callback.apply(this, arguments);
wait = true;
setTimeout(function () {
wait = false;
}, limit);
}
}
}现在你的请求功能:
var throttleApiFunc = throttle(apiFunc, 5000);
// this can only trigger one time each 5 seconds
throttleApiFunc();https://stackoverflow.com/questions/38817434
复制相似问题