0

既存の Rails プロジェクトをコンバートして Node.js を学習しています。コールバックと Node.js の非同期性について理解するのに時間がかかりました。

最初の一般的な試行は問題ないように見えました。私の RoR 機能は複製され、一般的な速度は Node.js を使用した方がはるかに高速でした。

ここでノードキャストを見て、自分の作成がすべてのノード プリンシパルに反するのではないかと考え始めました。

結果に応じて他の関数を呼び出す関数があります。シンプルな if、else if、else ロジック。

私が把握しようとしているのは、これを実行しても問題ないか、またはasync packageのようなものを使用する必要があるかどうかです。

特定の関数は次のようになります。

  checkAuthorization: function(socket,callback) {
    client.hget(socket.mac, 'authorized', function(err, val) {
      callback(val);
      if (val == null) {
        checkExteralAuth(socket.mac, socket.serial, function(val) {
          data = JSON.parse(val)
          authorized = (data["live"] == 'yep') ? true : false
          setRedisHash(socket.mac, 'authorized', authorized);
        });
      };
    });
  }

これを行うモード「ノード」の方法はありますか?

4

2 に答える 2

2

なぜそうではないでしょうか?Node.js は JavaScript プラットフォームです。関数型プログラミング言語では、関数内で関数を呼び出すことはまったく問題ありません。あなたはいつもそれをします。

とはいえ、特にコールバックを使用して、単に関数を呼び出すことを避けたい場合があります。によって参照される関数を呼び出す方法は、callbackその関数が何らかのコンテキストに ( を使用して) 明示的にバインドされていない限り、bindコンテキストを失っていることを意味します。

代わりに、callback.apply(this, [val]);あなたのビジネスに取り組むための好ましい方法かもしれません.

もう 1 つのことは、後で呼び出されるコールバック関数を渡しているため、可能な限り async の使用を真剣に検討することをお勧めします。私は node.js の経験があまりありませんが、その性質上、コールバック、ハンドラーを作成し、一般的な非同期トリックをあちこちで使用していることに気付くでしょう。

その仕事をずっと簡単にするパッケージを持つことは常に便利です...

于 2013-06-27T11:01:00.127 に答える
1

このコードには基本的に非ノード的なものは何もありません。あなたが目にするほとんどのライブラリは、まさにこのように書かれています。

しかし、かなり急速に成長する傾向があるアプリケーションで作業していると、最終的には「コールバック地獄」と呼ばれるものに遭遇します。そこでは、ネストのレベルが数十のネストされた無名関数呼び出しを持つことができるレベルに達します。

これはすぐに保守できなくなり、そこで制御フロー ライブラリの出番asyncですq

asyncコールバック地獄を管理するために任意のコードベースに簡単にドロップできqます。プロミスとして機能するようにコードを設計する必要がありますが、一般的により優れた API になります。

于 2013-06-27T11:07:16.423 に答える