【发布时间】:2014-02-14 21:58:23
【问题描述】:
我的 Node.js 应用程序中有一个循环,它不断地从我的数据库中获取“未处理”的行(每秒 1 个请求)。
我从数据库收到的每一行都将调用一个具有唯一数字 ID 的函数,并将数据库中的其他详细信息作为参数调用。一旦在此函数中处理了数据,数据库就会更新,并且该行被标记为“已处理”。
function fetch() {
db.query("SELECT id, data FROM table WHERE processed=0 ORDER BY id ASC", function(err, results) {
if(results.length > 0) {
for(var i=0; i<results.length; i++)
process(results[i].id, results[i].data);
}
});
}
var interval_fetch = setInterval(fetch, 1000);
function process(id, data) {
// Process data
db.query("UPDATE table SET processed=1 WHERE id="+id);
}
但是,在某些情况下,处理数据和更新数据库需要一秒钟以上的时间。在这种情况下 process() 它使用相同的参数调用了两次甚至更多次。
在 Node.js 环境中,什么是最简单的方法来确保函数只在某个 ID 参数的情况下同时被调用一次?
是否有任何软件包提供此功能并且只需要两三行额外代码?
(解决方案不一定要防止多次调用该函数。如果我能够检查进程()内部,如果它已经用某个id调用,我也可以在数据之前结束它被处理了两次。)
【问题讨论】:
标签: javascript node.js function unique