0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Node.js,Expressメモ⑤の1

Posted at

エンドゲームが待ち遠しいですね。と書いているうちにはじまってしまいます。こんにちは。

rete.jsを使いたいためにExpressのチュートリアルを進めています。

今回はこちらのPart5をやります。
https://developer.mozilla.org/ja/docs/Learn/Server-side/Express_Nodejs/Displaying_data

だんだん英語の割合が増えてきています。ページの構成もちょっと謎になってきました。

async

javaScriptの非同期モジュールみたいです。

npm install async

チュートリアルで作っているアプリケーションは特定の順番で処理を行う場合や並列に処理を実行して処理を行う場合や
フローを管理して必要な情報がすべてそろった時にページをレンダリングすることもあるようです。
そんな時にasyncの以下の機能を駆使してやろうよ、ということみたいです。

async.series() > 特定の順番
async.parallel() > 並列
async.waterfall() > 全部揃ったら実行

だいたい読んだ通りのイメージです。

ページを表示するために1つの問い合わせで済む場合

例えばモデルの登録されている数を表示したい場合以下のように書くようです。
Mongooseのモデルのcount()メソッドを使用しています。

export.some_model_count = function(req, res, next){
    SomeModel.count({a_model_field: "match_value"}, function(err, count){
        res.render("the_template", {data: count});
    });
}

parallel

単純な実装ではメソッドを直列に並べて一つ一つ実行結果を受け取って最終的にレンダリングすることです。
その方法は確実ですが時として並列に処理させた方が良いことがあります。
async.parallel()は並列に処理を実行し、すべてが終了したタイミングでコールバックを受け取ることができるようです。

async.parallel({
    one: function(callback){...},
    two: function(callback){...},
    ...
    something_else: function(callback){...}
    },
    function(err, results){
        //resultsには{one: 1, two:2, ..., something_else: some_value}みたいにはいってくる模様。
        }
);

series

後続の関数が以前の関数のreturnに依存しない場合に順番に実行するにはasync.seriesを使うよう。
parallelと書き方がほぼ同じなのはとてもよさそうです。

async.series({
    one: function(callback){...},
    two: function(callback){...},
    ...
    something_else: function(callback){...}
    },
    function(err, results){
        //resultsには{one: 1, two:2, ..., something_else: some_value}みたいにはいってくる模様。
        }
);

確実に順番通り実行するためにはone: function,,,のところを配列にする必要があるようです。

async.series([function(callback){
                          callback(null, "one");
                          },
              function(callback){
                          callback(null, "two");
                          }],
              function(err, results){
                    //resultsは["one", "two"]のようになるみたいです。
              }
);

walterfall

上から順番に処理を渡していく方法です。

async.waterfall([
    function(callback){
        callback(null, "one", "two");
    },
    function(arg1, arg2, callback){
        //arg1 > one
        //arg2 > two
     //らしい
        callback(null, "three");
    }],
    function(err, result){
    // resultは最後のcallbackのthreeが入ってくる
    }
);

⑤の1ってなんだ!ってことですけどつづく

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?