首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确保不执行一次操作两次

确保不执行一次操作两次
EN

Stack Overflow用户
提问于 2016-08-07 18:51:40
回答 2查看 53关注 0票数 0

我在Node.js上有应用,使用Express作为API路由,使用MongoDB作为DB。我有个抽奖。用户只需参加一次抽奖。我目前在内存中使用一个参与数组,但是如果您同时向API发出两个请求,用户将被抽奖两次。我怎么能不允许参加抽奖超过一次?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-07 23:16:22

您需要构造您的工作流以支持幂等操作。也就是说,执行两次相同的操作不会改变结果。

例如,增量变量不是幂等函数,因为调用增量函数两次会导致变量增加两次(例如,两次调用x++将导致将2添加到x)。我认为这是您当前设计的精髓,您在其中提到:“如果您同时对API提出两个请求,用户将参与两次抽奖”。

幂等运算的一个例子是将变量设置为值。例如,多次调用var x = 1只会导致将值1分配给x。无论您调用这一行多少次,x始终是1

帮助您入门的一些资源:

票数 0
EN

Stack Overflow用户

发布于 2016-08-07 19:22:33

您可能应该将数组存储在mondodb中,如果节点重新启动,您不希望松开这个列表。

关于“连接两次”问题,只需节流向API发出请求的客户端函数,以便在您的油门函数传递的时间内只能调用一次。

实例节气门功能:

代码语言:javascript
复制
function throttle (callback, limit) {
   var wait = false;
   return function () {
      if (!wait) {
         callback.apply(this, arguments);
         wait = true;
         setTimeout(function () {
            wait = false;
         }, limit);
      }
   }
}

现在你的请求功能:

代码语言:javascript
复制
var throttleApiFunc = throttle(apiFunc, 5000);

// this can only trigger one time each 5 seconds
throttleApiFunc();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38817434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档