在模型保存到数据库之前,我会生成一个唯一的id。所以我调用一个方法来生成一个随机的唯一id,然后检查这个id是否可用。下面是我正在使用的while循环,但它从未中断过while循环:
beforeValidation: function(values, next) {
var counter = 0;
var slug = SlugService.generate_slug();
console.log(counter + ":" + slug);
async.whilst(
function () { return values.slug === undefined && counter <= 10; },
function (callback) {
counter++;
Lists.findOne({slug: slug}).exec(function(err, list) {
if (list === undefined) values.slug = slug;
slug = SlugService.generate_slug();
console.log(counter + ":" + slug);
});
},
function (err) {
console.log("err");
values.slug = slug;
}
);
next();}
我正在使用异步库,但它似乎不起作用。它只是在whilst循环完成之前调用next();。
我还创建了一个Service类,并在其中添加了此方法,但这似乎也不起作用:
function checkSlug(method, counter) {
slug = SlugService.generate_slug();
method({ slug: slug }).exec(function(err, list) {
if (list !== undefined && counter <= 10) {
counter++;
checkSlug();
}
});
}我更喜欢让选项#2工作,这样我就可以在我的所有模型中共享它。
发布于 2014-07-21 15:46:37
您在异步函数中有不同的错误。
1.)您的函数中没有回调(参见:https://github.com/caolan/async#whilst) 2。)您在异步完成之前调用了sails回调
试试这个:
beforeValidation: function(values, next) {
var slug = "";
async.whilst(
function check_slug() { return values.slug === undefined },
function generate_slug(callback) {
slug = SlugService.generate_slug();
Lists.findOne({slug: slug}).exec(function(err, result) {
if (err) {
return callback(err);
}
if (result === undefined){
values.slug = slug;
}
callback();
});
},
function (err) {
if(err){
return console.log(err);
}
next();
});
}https://stackoverflow.com/questions/24847810
复制相似问题