問題タブ [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.
node.js - async.parallel はブロッキング コードも並列化しますか?
async
コードの並列化に関連してパッケージの動作を理解しようとしています。私が理解していることから、コールバック地獄/スープを避けるためにコードを構造化することは役に立ちますが、それが唯一の利点ですか?
上記のコードでは、3 つの API 呼び出しはすべて、他の呼び出しが完了するのを待たずに行われます。仕様通り。最後のコールバックは、最長の API 呼び出しが戻った後に呼び出されます。
しかし、コードを変更していくつかのブロック操作を行うとどうなるでしょうか?:
「 Node.jsはシングル スレッドです」を額面通りに受け取ると、async
ブロックが 15 秒後に最後のコールバックを実行することを意味すると解釈できますが、「Node.js は独自の内部スレッド プールを維持している」ことを知っていると仮定できますか? Node はそれぞれのコールバックを独自のスレッドで実行し、関数を真に並列化し、5 秒後に最後のコールバックを呼び出すでしょうか?
node.js - 非同期関数で async を使用する
async
これはばかげているように聞こえますが、既存の非同期関数を処理するために使用する方法がわかりません。
たとえば、foo(arg1, arg2, ..., argN, callback)
あるノード モジュールで定義された非同期関数について考えてみましょう。async
のwaterfall(tasks,[callback])
関数でこれを使用したいとします。どうすればこれを行うことができますか?
callback
しかし、関数の終了前に呼び出す必要があるため、それはできません。ヘルプ?
node.js - node-async は一般的な「並列フェッチ」ワークフローを処理しますか?
アイテムの配列を処理する関数を書いていることがよくあります。
- 非同期関数は、各関数が配列の異なる項目を引数として使用して、並列に何度も実行されます
- すべての機能が完了すると発火するカウンター
例えば:
Caolan の非同期ライブラリを他のワークフロー スタイルのタスクに頻繁に使用していますが、このワークフローに対応するものを見つけることができないようです。たとえば、 async.parallel は多数の異なる関数を並行して実行することに関するものですが、私が望むのは同じ同じ関数を異なる引数で実行することです:
非同期はこのようなものを提供しますか?
node.js - Node.js でストリームを非同期キューへの入力として使用し、queue.drain が 1 回だけ呼び出されるようにする方法
ストリームから一連の入力を読み取り、入力ごとに HTTP GET 要求を実行します。一度に作成する接続が多すぎるのを避けるために、async.queueを使用してこれらの入力をキューに入れています。
すべての入力が読み取らend
れた後 (ストリームに出力された後)、以前の結果を収集して概要を生成したいと思います。
私は現在queue.drain
、この目的のために使用しています。ただしqueue.drain
、プロセスが入力時にブロックされる可能性があり、これが発生するとキューが空になるため、私の場合は複数回呼び出される可能性があります。
queue.drain
それで、ストリームを扱うときに一度だけ呼び出されることを保証する非同期ライブラリに何かがありますか? この機能が実現できる限り、別の制御フローに切り替えてもかまいません。
javascript - Node.JS async.parallel は、すべてのタスクが完了するまで待機しません
aync.parallelを使用して、2 つの関数を並行して実行しています。関数は RSS フィードを要求します。次に、RSS フィードが解析され、私の Web ページに追加されます。
しかし、何らかの理由async.parallel
で、2 つの関数が完了するまで待たずにコールバック メソッドを実行します。
タスクが完了すると、結果が最終的なコールバックに配列として渡されます。
私のコード。
実際、「やった!」しかありません。私のウェブページで。なんで?
電話する必要があるのはなぜres.end()
ですか?
Node.JS のドキュメントには次のように書かれています。
メソッド response.end() は、各応答で呼び出されなければなりません。
呼び出さないと、Web ページが「ダウンロード」されます (ブラウザーのアドレス行に進行状況バーが表示されることを意味します)。
javascript - 既存のコールバックで async.waterfall を使用する方法
コマンド オブジェクトの配列があります。do コマンドを呼び出す必要があります。これは非同期呼び出しであり、各配列要素に対して順番に実行されます。失敗した場合は、処理を停止する必要があります。
個々の非同期呼び出しに対して async.waterfall 呼び出しを行う方法は知っていますが、非同期呼び出しの配列を async.waterfall に渡す方法がわかりません。
構文的に設定方法がわかりません。
これは Command オブジェクトであり、読み取り関数は、ウォーターフォール方式で実行する必要がある非同期呼び出しです...
javascript - node.jsストリームからdbにインポートした後に最終コールバックを同期する方法
Q
やのようなライブラリのかなり典型的な使用例のようasync
に思えますが、それを行うための最良の方法が何であるかを実際に理解することはできませんでした.
node-csv
(を使用して) 150 行の CSV ファイルをインポートし、行ごとに mongo ドキュメントを作成したいと考えています。ただし、ストリームの解析は「db inserts」よりも速く終了するように見えるため、コールバックの呼び出しが早すぎるという問題に遭遇します。
それで、ストリームの解析/データベースの挿入が非同期である間、最後のコールバックがすべての挿入が終了した後にのみ行われるように、async/promisesでそれを修正する方法を教えてください。