js循环async调用
async.js loop around the async call
在模型保存到数据库之前,我生成一个唯一的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();
}
我正在使用异步库,但它似乎不工作。它只调用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工作,这样我就可以在我所有的模型中共享它。
你的async函数有不同的错误。
1)。你的函数中没有回调函数(参见:https://github.com/caolan/async#whilst)2.) 你在async完成之前调用了风帆回调
试试这个:
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();
});
}
相关文章:
- 超过了async.detect最大调用堆栈大小
- 使用ajax调用中的数据而不使用async:false
- async.retry-已调用回调
- jQuery没有指定异步调用级别async:false
- node.js,async,restify:无法使restify调用在async.series内同步
- 如何将async.whilst调用的结果发送到和express.js res.send()
- 如何在nodejs中的async.each中进行同步http调用
- 对async函数进行同步调用
- 我怎么能像调用synch方法一样调用async方法呢
- 使用 Async.parallel 我的参数的生命周期不会超过使用 MongoDB 的 NodeJS 中的异步调用
- 使用 nodejs/async 进行批处理和延迟 API 调用
- 使用从 async.series 调用的原型函数中的“this”
- 如何将 setCallbackHandler() 替换为 Sync 调用而不是 Async
- 使用 async.queue 超出最大调用堆栈大小
- 在 async.each 的帮助下调用 foreach 中的同步函数(带回调)
- 在连续的AJAX调用上使用async
- 在Foreach循环中调用Async方法
- 使用.join()在async promise内部调用async promises
- 多次调用Async函数
- 在其中调用async函数