問題タブ [node-async]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 非同期並列バグ?
ここでは、Async.js への引数を持つ関数の配列を作成しようとしています。
この配列は、関数配列を Async に渡す直前に、MakeRequest のループ内で設定されることになっている RunRequest のインスタンスで構成されています。
request[i] のリクエストは RunRequest に渡すと問題ありませんが、RunRequest 関数内では未定義ですか?
node.js - Expressjs を使用した非同期ウォーターフォールのエラー処理
async.waterfallでスローされたときにexpressjsがエラーを処理しない理由がわかりません
/error を取得すると、expressjs はクラッシュ サーバーなしで適切なエラーを出力しますが、/asyncerror を取得すると、サーバー クラッシュで標準出力に出力されます。
ありがとうございます。
javascript - Async.js シリーズのすべての関数が実行されるわけではありません
Async.jsを使用して一連の非同期関数を起動しようとしています。以下は私のコードです。最初の 2 つの関数のみが実行されます。シリーズの 3 番目と 4 番目の関数は実行されません。考えられる機能を最も基本的なものに単純化しました。しかし、それでも実行しません。誰かが私が間違ったことを教えてもらえますか?
編集 --- 以下の回答で示唆されているように、最初の 2 つの適切な関数を作成しました。ただし、一連の関数の最初の関数のみが実行されます。関数 2 ~ 4 は呼び出されません。このコードには他に何か問題があるに違いないと思います。
node.js - Node.js非同期ウォーターフォールにパラメーターを渡す
async の初期関数にいくつかのパラメーターを渡す必要がありますwaterfall()
。提案された方法 https://github.com/caolan/async/issues/14は、ExpressJS関数からの応答を渡す必要があるため、機能しません。
xml - nodejs async を使用して大きな xml ファイルを処理する (関係あり)
大きな XML ファイル (サイズは約 25 MB) を処理し、データをドキュメントに整理して MongoDB にインポートする必要があります。
問題は、xml ドキュメントに約 5 ~ 6 種類の要素があり、それぞれに約 10,000 行あることです。
タイプ a の xml ノードを 1 つフェッチした後、タイプ b、c、d などの対応する要素をフェッチする必要があります。
ノードでやろうとしていること:
- タイプ a のすべての行をフェッチします。
- 行ごとに、xpath を使用して対応する関連行を見つけ、ドキュメントを作成します。
- mongodb にドキュメントを挿入する
タイプ a の行が 10k 行ある場合、2 番目のステップは 10k 回実行されます。物事が永遠にかからないように、これを並行して実行しようとしています。したがって、async.forEach は完璧なソリューションのように見えました。
async.forEach(rowsA,fetchA);
私の fetchrelations 関数はこのようなものです
これを実行しようとすると、コード内の console.log は 1.5 秒ごとに約 1 回しか実行されず、期待どおりにすべての行に対して並列に実行されません。過去 2 時間、頭を悩ませ、これを理解しようとしてきましたが、何が間違っているのかわかりません。
私はノードにあまり慣れていないので、しばらくお待ちください。
javascript - JavascriptAsync.jsParallelがsocket.ioで機能しない
次のコードブロックがあります。
module.rpc
は、を介してサーバーから必要なデータをフェッチする関数ですsocket.io
。ここで、最後の関数(async.parallel
の2番目の引数)は、指定された3つの関数がコールバックされた後にのみ呼び出されることになっています。ただし、テンプレート(EJS)のレンダリング中に、にアクセスしようとするとgroups.data
、次のエラーが発生することがあります。
コードは私には完全に問題ないように見えますが、たまにしか機能しません。基になるコードを変更せずにページを繰り返しリロードし、成功率は約20%でした。ここで物事がうまくいかない理由はまったくわかりません。私が推測できるのは、その変数の割り当てが遅れているということだけです。そのため、を使用してレンダリングを遅らせようとしwindow.setTimeout
ましたが、役に立ちませんでした。なぜこうなった?どうすれば修正できますか?
javascript - node.js + asyncモジュールで同期コールバックから同期ループを作る
人気のある node.js モジュールasyncには、コレクションと制御フローの関数が含まれており、並列または直列で動作できるバージョンもあります。
しかし、その中には、直列に動作するループを構築する方法が見つかりません。
私はこの疑似コードと同じことをしようとしています:
getLine()
すべての呼び出しを並行して呼び出したい場合は、 を使用できますasync.whilst
。for
orwhile
ループのようなものを作成するのではなく、配列を反復処理したい場合は、 を使用できますasync.eachSeries
。
series
コレクションの繰り返しではなく、制御フローで動作を取得するには何を使用できますか?
javascript - node.js: プログラムが予期せず終了するか、単にハングする
ネットワーク操作を実行するモジュールを node.js に作成しました。このモジュール (以下の変数) を使用する小さなスクリプトを作成しましたcheck
。次のようになります。
ここで興味深いのは次のとおりです。このコードがテストの一部として実行されるとmocha
、テストは期待どおりに終了します。ログ ステートメントが表示され、プロセスが終了します。
コードがスタンドアロン ノード スクリプトとして実行されると、ログ ステートメントが出力されますが、プロセスはハングするだけです。
デバッグしようとして、 を使用してプログラムを開始し、 を--debug-brk
使用するとnode-inspector
、早期に終了します! process.on 'exit'
と呼ばれていることが分かります。モジュール内のいくつかの内部コールバックがまだ呼び出されていない間に終了します。したがって、上記のログ ステートメントも出力されません。
私は今立ち往生しており、なぜこれが起こっているのかわかりません。誰かが同様の行動を見たことがありますか?
javascript - async.series および JavaScript 変数
私の理解には根本的な断絶があると思います。コールバックについて読んでいて、以下が機能しない理由を探しましたが、間違った場所を探している可能性があります。次のコードがあります。
console.log の「テスト」が出力されていないようで、コードのさまざまな繰り返しを何度も試しましたが、最も内側のループ (users.push ユーザー) の外に出ると、できません。ユーザーの値を取得します。空の配列 [] になってしまいます。誰かが洞察を持っているか、おそらく私の考えのどこが間違っているかを指摘できますか? ありがとうございました。
node.js - async.map 関数がネイティブの fs.stat 関数で機能するのはなぜですか?
ドキュメントに従って、2 番目の引数は次のとおりです。
iterator(item, callback) - 配列内の各アイテムに適用する関数。
罰金。
イテレータには、エラー (null の場合もある) と変換されたアイテムで完了すると呼び出されるコールバック (err、変換済み) が渡されます。
それはこれに準拠していないと思いますし、fs.stat
これはうまくいかないと思います。
次のようになります。