Javascript js循环异步调用

Javascript js循环异步调用,javascript,node.js,async.js,Javascript,Node.js,Async.js,在将模型保存到数据库之前,我将生成一个唯一的id。所以我调用一个方法来生成一个随机的唯一id,然后检查该id是否可用。这是我正在使用的while循环,但它从未脱离while循环: beforeValidation: function(values, next) { var counter = 0; var slug = SlugService.generate_slug(); console.log(counter + ":" + slug); async.whilst( functio

在将模型保存到数据库之前,我将生成一个唯一的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();
验证前:函数(值,下一步){ var计数器=0; var slug=SlugService.generate_slug(); 控制台日志(计数器+”:“+段塞); 异步的(
函数(){return values.slug==undefined&&counter异步函数中有不同的错误

1.)函数中没有回调函数(请参阅:) 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();
  });
}
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();
  });
}