質問

Asyn Library( https://github.com/caolan/async.com/a)>)。async.ach関数を使用すると、その機能がうまく機能しますが、配列アイテムの注文を変更してください。

        module.exports = {


           index: function (req, res) {
            var async = require('async');
            var data = new Object();

            data.title            = "";     
            data.meta_keywords    = "";     
            data.meta_description     = "";
            data.category         = new Array();

            bredcrumbs = new Array();
            bredcrumbs[0] = {'text':'Home','link':'Link','active':false};
            category_list = new Array();
            categories = new Array();

            async.waterfall([
                function(callback){
                    Category.find({sort: 'name ASC'}).done(function(err,cat_data){
                        //console.log(cat_data); 
                        categories = cat_data;
                        callback(null);
                    });
                },
                function(callback){

                    async.each(categories, SaveData, function(err){
                        // if any of the saves produced an error, err would equal that error
                        callback(null);
                    });
                },
            ], function () {
                data.category = category_list;
                //console.log(category_list);
                res.view('pages/home',data);
            });

            function SaveData(item,callback){ 
                Word.count({category_id:item['id'],status:'1',is_approved:'1'}).done(function(err, total){ 
                    t_category              = new Array();
                    t_category['name']      = item['name'];
                    t_category['keyword']   = item['keyword'];
                    t_category['link']      = "http://"+req.headers.host+"/game/"+item['keyword'];
                    t_category['total']     = total;
                    category_list.push(t_category);
                    callback(null);
                });
            }

          },
          /**
           * Overrides for the settings in `config/controllers.js`
           * (specific to HomeController)
           */
          _config: {}  
        };
.

Async.each関数を使用しています

      async.each(categories, SaveData, function(err){
                    // if any of the saves produced an error, err would equal that error
                    callback(null);
       });
.

役に立ちましたか?

解決

async.each()はSeries In Series In Series Insirectではなく、Async.EachSeries()を元の配列と同じ順序で保持する場合はasync.achseries()を使用することをお勧めします()。カテゴリ)

他のヒント

ドキュメントから:

この関数は、並行して各項目にイテレータを適用するので、イテレータ関数が順番に完了するという保証はありません。

処理後に配列をソートするだけなのはなぜですか?

例:

function compareByName(row1, row2) {
    if (row1.name > row2.name) {
        return 1;
    }
    return row1.name === row2.name ? 0 : -1;
}

categories.sort(compareByName);
.

または最後のミリ秒をリクエストを押す必要がない場合は、代わりにeachSeriesを使用できます。

btw私はあなたがnew Array()によってあなたの{}の多くを置き換えるべきだと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top