問題タブ [eventemitter]
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 - Node.js-イベントは発生しませんか?
特定のイベントをリッスンして処理することになっているコードがいくつかありますが、イベントが実際に発行されることはないか、リスナーがイベントをキャッチすることはありません。
ここには、リッスンするサーバーと処理するアプリの2つのモジュールがあります(アプリがメインモジュールです)。
server.js:
(これは作成できる唯一のオブジェクトです):
app.js:
ここでの問題は何ですか:イベントが発生していないのですか、それともリスナーがリッスンしていないのですか?
それは私が見逃しているものかもしれません。あなたは彼らが2つの頭について何を言っているか知っています...
TIA :)
node.js - nodejs イベントのプロトタイピングと that = this を使用したそのスコープ
イベントシステムを使用してNodejsで開発しようとしています。次のコードを実装し、テストに合格しました(モカを使用)。that
ただし、変数のスコープのため、本番環境で機能するかどうかは確信が持てません。
私のコードでは、 を割り当てthat=this
ます。config
その後、オブジェクトを割り当て、that.config
コールバックは構成をパラメーターとして渡さずにイベントを発行します。次に、リスナー関数は を使用しthat.config
て別のシグナルを送信します。キャッシュ オブジェクトは、redis データベースへの要求です。
問題は、that.config
オブジェクトは、シグナルを発信したときに常にスコープを参照するのか、それとも、最初に発信されたシグナルの後、最初のリスナーがthat.config
(別のコールバック内で)使用する前に、別の要求 (別の構成を取得する) によって変更される可能性があるのかということです。
構成オブジェクトの例:
node.js - NodeJS : 「EventEmitter のメモリ リークが検出されました。11 個のリスナーが追加されました」のデバッグ方法
このエラーをスローするアプリケーションをデバッグするにはどうすればよいですか:
リスナーの制限を増やすために想定されるリークオブジェクトを見つけることができませんでした .setMaxListeners(0);
SOLUTION (fardjad と jan salawa より)
jan salawa の検索で、詳細なスタック トレースを増やすための作業ライブラリ ( longjohn ) を見つけました。EventEmitter.addListener
fardjad の応答により、 AND のプロトタイプを作成する必要があることがわかりましたEventEmitter.on
。
ソリューションを使用すると、次の新しいトレースを取得できます。
node.js - インポートされたモジュールへの関数の委譲 Node.js
現在、次の形式の Node.js モジュールがあります。
ただし、on
を呼び出しても、登録されたコールバックは呼び出されませんemitSomething
。
最後の行を次のように変更することで、これを回避できます。
on 関数を別のモジュールで定義された関数にデリゲートできない理由はありますか?
javascript - 関数を実行するときに「this」を設定するNode.js
エクスポートされたクラス関数コンストラクターを持つ Node.js でモジュールを作成しています。そのクラスに 2 つのプロトタイプ関数を追加しましたが、独立した関数もたくさんあります。
クラスの内部でイベントとコールバックのハンドラーとして使用する単純な関数。これらの関数をクラス プロトタイプの一部として公開したくありません。
フリースタンディング関数のチェーンでは、モジュールが構築されているメインクラスを参照して、イベントを発行できるようにしたいと考えています (私は を使用しutil.inherits(myclassconsructor, EventEmitter)
ました)。しかし、私の内部機能this
では正しくありません。selfというモジュールにグローバル変数を作ってみたりself = this
、コンストラクタの1行目にしました。
次に、それを実行した場合、self.on("message name", function() {console.log("worked")});
実際に機能することを確認しました。
次に、問題のモジュールを構築するメインモジュールに移動し、上記のモジュールを作成して同じイベントにバインドしました。モジュールの外でイベントを受け取りません...
モジュール A
モジュール B
私が抱えている問題と思われるこのスレッドを見つけましたが、結果を再現できません。node.js eventEmitter + http.request
javascript - Node.js サーバー/クライアント モジュールの混乱、EventEmitter の問題
Node.jsまたはクライアント側で使用できるライブラリを作成しようとしています。
私は2つの問題に直面しています:
正しくエクスポートできないようです。私はこのドキュメントを使用しています。
MyClass = exports? and exports or @MyClass = {}
うまくいかないようなので、とりあえずファイルを分割します。ライブラリはイベントを発行します。これをより簡単に行う方法について、誰かが私の混乱を明確にしてくれることを願っています。以下で私に従ってください:)
Node.js:
としょうかん:
必須:
クライアント側
EventEmitterが含まれています。
ライブラリファイルはスクリプトに含まれており、私が行っている場所:
クライアント側
Backbone.js/Underscore.js が含まれています (上記の EventEmitter ライブラリではありません)。
ライブラリファイルはスクリプトに含まれており、私が行っている場所:
では、Node とブラウザの両方にイベントを発行するライブラリを作成する最良の方法は何でしょうか? EventEmitter ライブラリは、両方を含めたときにバックボーンと競合するように見えました (バックボーンの有無にかかわらずノードで動作する必要があります)。もっと簡単な解決策があるはずです!
node.js - removeAllListeners() が呼び出されない場合、EventEmitter はメモリ リークを引き起こしますか?
この質問は、node-imap モジュールを使用していたときに頭に浮かびました。( https://github.com/mscdex/node-imapを参照)
このモジュールでは、fetch() メソッドは ImapFetch() オブジェクトを提供するコールバック関数を呼び出します。これは、コードが「メッセージ」イベントをリッスンすることを想定しています。次に、メッセージ イベントは、リッスンする必要があるイベントを含む各オブジェクトのメッセージ オブジェクトを渡します。
モジュールのサンプル コードは次のとおりです。
示されているように、リスナーは決して削除されません。プロセスが一度実行された直後に終了する場合は、これで問題ない可能性があります。ただし、プロセスが長時間実行されている場合、コードが繰り返し実行され、メモリ リークが発生しますか? つまり、リスナーは削除されないため、コマンドの実行中にのみ使用されるにもかかわらず、すべてのフェッチ オブジェクトとメッセージ オブジェクトが保持されます。
私の理解は間違っていますか?