首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >async.js循环遍历异步调用

async.js循环遍历异步调用
EN

Stack Overflow用户
提问于 2014-07-20 13:55:41
回答 1查看 90关注 0票数 0

在模型保存到数据库之前,我会生成一个唯一的id。所以我调用一个方法来生成一个随机的唯一id,然后检查这个id是否可用。下面是我正在使用的while循环,但它从未中断过while循环:

代码语言:javascript
复制
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类,并在其中添加了此方法,但这似乎也不起作用:

代码语言:javascript
复制
function checkSlug(method, counter) {
  slug = SlugService.generate_slug();
  method({ slug: slug }).exec(function(err, list) {
    if (list !== undefined && counter <= 10) {
      counter++;
      checkSlug();
    }
  });
}

我更喜欢让选项#2工作,这样我就可以在我的所有模型中共享它。

EN

回答 1

Stack Overflow用户

发布于 2014-07-21 15:46:37

您在异步函数中有不同的错误。

1.)您的函数中没有回调(参见:https://github.com/caolan/async#whilst) 2。)您在异步完成之前调用了sails回调

试试这个:

代码语言:javascript
复制
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();
  });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24847810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档