在另一个函数中使用Async

时间:2017-01-10 10:56:19

标签: javascript node.js asynchronous sails.js

我在sails.js框架中使用node.js和async。 我试图创建一个函数,对数据数组执行一些异步数据库操作,但我有一个问题找出一个简单的方法将异步结果返回到父函数。 这是我的代码:

convertProductfields: function (articlesFromAurelia){

    async.each(articlesFromAurelia, function (post, cb) {
      Categories.find({name: post.Categoria})
        .then(function(category){

          post.cat_id = category[0].cat_id;              
          cb();
        })
        .fail(function(error){
          cb(error);
        })
    }, function(error){
      if(error) return res.negotiate(error);

      sails.log.debug('articlesFromAureliaModified ' , articlesFromAurelia);
      return articlesFromAurelia;
    });

    sails.log.debug('articlesFromAureliaNotModified ' , articlesFromAurelia);
    return articlesFromAurelia;
}

问题当然是代码的执行顺序。当异步操作的结果可用时,我的函数已经返回....那么,如何使它工作?谢谢!

2 个答案:

答案 0 :(得分:1)

使用Node 6.0,可以使用内置的Promise。

convertProductfields(articlesFromAurelia)
  .then(() =>{
       //handle success
  }).catch(() => {
       //handle error
  })

并使用上述功能,

$input = array("a", "b", "c", "d", "e");
$output = array_slice($input, 0, 3);   // returns "a", "b", and "c"

答案 1 :(得分:0)

希望它对你有所帮助。

convertProductfields: function (articlesFromAurelia, callback){

  async.each(articlesFromAurelia, function (post, cb) {
    Categories.find({name: post.Categoria})
      .then(function(category){
        post.cat_id = category[0].cat_id;
        cb();
      })
      .fail(function(error){
        cb(error);
      })
  }, function(error){
    if(error) 
      return callback(null);  //incase of error, return null

    sails.log.debug('articlesFromAureliaModified ' , articlesFromAurelia);
    return callback(articlesFromAurelia);  //return updated articles
  });
}