我正在使用“帽子”生成一个令牌。
我正在尝试编写非常偏执的代码。所以,这个想法是系统生成一个 ID,检查它是否已经被占用(查询数据库),如果没有,它会返回它。如果有,再试5次。5 次后,发生了一些非常奇怪的事情,应用程序抛出错误。
简短的问题是:如果令牌实际可用,我怎样才能让这段代码依次运行 5 次,并可选择调用传递的回调(请参阅“退出”循环)?
Is 是只尝试一次的代码:
var hat = require('hat'),
mongoose = require('mongoose');
exports.makeToken = function( callback ){
Workspace = mongoose.model("Workspace");
var found = false;
var token;
// Generate the token, check that it's indeed available
token = hat();
Workspace.findOne( { 'access.token':token } , function(err, doc){
if(err){
callback(err, null);
} else {
if( doc ){
callback( new Error("Cannot generate unique token"), null );
} else {
callback(null, token );
}
}
});
}