0

私は、レス、スタイラスなどを前処理するライブラリに取り組んでいます。プリプロセッサは、本質的に非同期と同期の両方にすることができます。結果はビルド段階でのみ使用されるため、ここでブロッキング コードを記述しても問題ありません。

ほとんどのプリプロセッサは同期であり、ライブラリはチェーンの同期関数を想定しているため、プリプロセッサ関数からの同期と非同期の両方の結果を処理できる同期関数内にプリプロセッサ関数をラップすることが何とか可能かどうか疑問に思っていました関数?

基本的に、どういうわけか、このようなことをすることは可能でしょうか?

syncFn = function(contents) {
  var res = syncOrAsyncFn(contents, function(err, contents) {
    res = contents
  })
  // .. do some magic here that waits for the results of syncOrAsyncFn
  return res; // Return the result from a function that could be async or sync
}
4

1 に答える 1

0

申し訳ありませんが、それは不可能です。コードのブロックが実行されている間は、も実行できません。つまり、NodeJS には実際の並列処理はありません。res = contentsつまり、すべての同期操作がコードのブロックでジョブをsyncFn終了した後です。

これにより、NodeJS プログラマは次のようなコールバック パターンを使用する必要があります。

syncFn = function(contents, callback) {
  syncOrAsyncFn(contents, function(err, contents) {
    callback(contents);
  })
}
于 2013-04-05T08:29:36.483 に答える