1

私はこの機能を持っています:

exports.readPartial = function(html, values, response) {
  fs.readFile(__dirname + "/../html/partials/" + html, function(error, file) {
  if(error) { this.loadError(response, error); }
  else {
   console.log("\t--> partial found: " + file);
   return file; // FILE VALUE
  }
  });
}

その関数が呼び出されると、「file」の値を返す必要があります。ただし、return file;実際に im を呼び出すと、引数として渡した無名関数の値が返されます。nodejsを使用した非同期プログラミングでこの値を返す正しい方法は何ですか? を使用していvar that = this;ますか?

このスタイルのプログラミングにかなり混乱しました。

4

1 に答える 1

1

関数は非同期readPartial関数に依存していますreadFile。したがって、非同期にもなります。

この問題を解決するには、いくつかのオプションがあります。

したがって、基本的にこれは、両方の関数が非同期である必要があるか、両方が同期である必要があることを意味します。

これら 2 つのオプションのうち、コールバックも使用する非同期のオプションをお勧めします。これは、まさに Node.js のコア コンピテンシーである非同期のノンブロッキング I/O です。したがって、特に理由がない場合は、非同期バージョンに固執し、コールバックを使用してください。

もちろん、他にどのようなオプションが存在するかに興味があるかもしれません。だから、ここにある(私はそれをお勧めしませんが):

  • 呼び出しfs.readFileて、そのコールバックが返されるまで「待機」します。これは基本的にwhile(true)ループでアクティブに待機することを意味し、間違いなく悪い習慣と見なされます。とにかく、技術的には実用的です。まれに、本当にこれを実行したい場合や、単にこのような実装方法に興味がある場合は、syncasync.jsを確認してください。
于 2012-09-23T17:16:06.693 に答える