Node.jsでタイマーIDを取得する

Viacheslav Zahorodnyi

NodeJSアプリケーションに、ソケット付きのデータをクライアントに送信するための単純なサーバー側タイマーがあります。クライアント側からタイマーIDを停止できるように、タイマーIDをクライアントに送信するにはどうすればよいですか?

返されたクラスをソケットペイロードで渡そうとしましたが、「最大呼び出しスタックサイズを超えました。

socket.on('start', () => {
const timerID = setInterval(()=>{
   socket.emit('data',someData)
   },3000)
socket.emit('ID',timerId)
}

また、クラスシンボルをマッピングしようとしましたが、何も機能しません。

const array = Object.getOwnPropertySymbols(timerID);

array.map((symbol) => {
clearInterval(timerID[symbol]);
 });

NodeJSドキュメントにこれがあります:

timeout[Symbol.toPrimitive]"()

戻り値:このタイムアウトを参照するために使用できる数値

しかし、それも機能しませんでした。

jfriend00

クライアントはを停止できません。timerIDまた、nodejsでは、timerIDは単純な整数でも、文字列化できるものでもないため、クライアントに効果的に送信できません。

実際のtimerIDにマップされる独自の整数識別子を作成し、それをクライアントに送信すると、クライアントはタイマーXをキャンセルしたいというメッセージをサーバーに送り返すことができます。マップでtimerXを検索し、実際のtimerIDとタイマーを停止します。

const timerMap = new Map();
const timerCntr = 0;

socket.on('start', () => {
    const timerID = setInterval(()=>{
        socket.emit('data', someData)
    }, 3000);

    // create an integer reference for the timer
    // save a mapping between the integer reference and the actual timerID
    // in a server-side Map object
    const externalTimerID = timerCntr++;
    timerMap.set(externalTimerID, timerID);
    socket.emit('ID', externalTimerID);
}

// when client wants to stop the timer
socket.on('stop', externalTimerID => {
    let timerID = timerMap.get(externalTimerID);
    clearInterval(timerID);

    // remove externalTimerID from the Map so we don't leak memory  
    timerMap.delete(externalTimerID);
});

ノードv14.9.0以降、実際のtimerIDオブジェクトの代わりとして機能するtimerIDの整数バージョンを取得できます。

socket.on('start', () => {
    const timerID = setInterval(()=>{
        socket.emit('data', someData)
    }, 3000);

    socket.emit('ID', timerID[Symbol.toPrimitive]());
}

// when client wants to stop the timer
socket.on('stop', externalTimerID => {
    clearInterval(externalTimerID );
});

これtimerID[Symbol.toPrimitive]()は、それが数値であり、timerIDオブジェクトの代わりとして機能することを確認したサンプルnodejsアプリです

const timerID = setInterval(() => {
    console.log(`hi`);
}, 500);

const integerID = timerID[Symbol.toPrimitive]();

console.log(typeof integerID, integerID);    // shows it is an integer 

setTimeout(() => {
    console.log("clearing Interval with integerID");
    clearInterval(integerID);
}, 2000);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Node.jsでマイクロタイムを取得する方法は?

分類Dev

node.jsで6か月のタイマーを設定する方法

分類Dev

データnode.jsをejsファイルに送信し、angular.jsでデータを取得する方法

分類Dev

node.jsでmysqlからデータを取得する方法

分類Dev

node.jsでjqueryのPOSTデータを取得する

分類Dev

アシスタントアプリのFirebaseFunctionsのNode.jsでGoogleユーザーIDを取得する

分類Dev

GraphQLスキーマディレクティブでフィールドタイプを取得する方法(Node.js、graphql-tools)

分類Dev

Node.jsでマングーススタイルのスキーマMSSQLを使用する

分類Dev

node.jsで生のコマンドライン引数を取得する

分類Dev

Node.jsの非同期でAPIデータを取得し、データを取得することで同期する

分類Dev

FireBaseからnode.jsファイルにデータを取得する

分類Dev

node_jsとmongodbで_idを使用してデータを更新する方法

分類Dev

Node.js ElasticBeanstalkでnginx構成をカスタマイズする方法

分類Dev

Node.jsでGoogleタグマネージャーを使用する方法

分類Dev

Express.js Node.jsのマングースクエリデータ、間違った結果を取得する

分類Dev

Node.jsでURLをパラメータとして取得するには?

分類Dev

node.jsでjsonデータキー値を取得します

分類Dev

Node.JSでJSONを取得する方法

分類Dev

Microsoft以外のOSでWebマトリックスnode.jsスターターテンプレートを取得する方法

分類Dev

Node.jsでターミナルの幅を取得します

分類Dev

node.jsからAjaxにデータを取得する方法は?

分類Dev

node.jsでファイルの完全パスを取得する

分類Dev

Node.jsで完全なファイルパスを取得する

分類Dev

Node.jsでクライアントからサーバーに(urlパラメータなしで)データを取得する方法は?

分類Dev

ELEMENT_NODEタイプのみで子ノードを取得する方法

分類Dev

subStringを使用してnode.jsでエラーを取得する

分類Dev

node.jsで応答ヘッダーを取得する方法

分類Dev

typescriptを使用してnode.jsの他のパラメータで画像ファイルを取得するにはどうすればよいですか?

分類Dev

Node.jsでbashコマンドを実行して終了コードを取得する

Related 関連記事

  1. 1

    Node.jsでマイクロタイムを取得する方法は?

  2. 2

    node.jsで6か月のタイマーを設定する方法

  3. 3

    データnode.jsをejsファイルに送信し、angular.jsでデータを取得する方法

  4. 4

    node.jsでmysqlからデータを取得する方法

  5. 5

    node.jsでjqueryのPOSTデータを取得する

  6. 6

    アシスタントアプリのFirebaseFunctionsのNode.jsでGoogleユーザーIDを取得する

  7. 7

    GraphQLスキーマディレクティブでフィールドタイプを取得する方法(Node.js、graphql-tools)

  8. 8

    Node.jsでマングーススタイルのスキーマMSSQLを使用する

  9. 9

    node.jsで生のコマンドライン引数を取得する

  10. 10

    Node.jsの非同期でAPIデータを取得し、データを取得することで同期する

  11. 11

    FireBaseからnode.jsファイルにデータを取得する

  12. 12

    node_jsとmongodbで_idを使用してデータを更新する方法

  13. 13

    Node.js ElasticBeanstalkでnginx構成をカスタマイズする方法

  14. 14

    Node.jsでGoogleタグマネージャーを使用する方法

  15. 15

    Express.js Node.jsのマングースクエリデータ、間違った結果を取得する

  16. 16

    Node.jsでURLをパラメータとして取得するには?

  17. 17

    node.jsでjsonデータキー値を取得します

  18. 18

    Node.JSでJSONを取得する方法

  19. 19

    Microsoft以外のOSでWebマトリックスnode.jsスターターテンプレートを取得する方法

  20. 20

    Node.jsでターミナルの幅を取得します

  21. 21

    node.jsからAjaxにデータを取得する方法は?

  22. 22

    node.jsでファイルの完全パスを取得する

  23. 23

    Node.jsで完全なファイルパスを取得する

  24. 24

    Node.jsでクライアントからサーバーに(urlパラメータなしで)データを取得する方法は?

  25. 25

    ELEMENT_NODEタイプのみで子ノードを取得する方法

  26. 26

    subStringを使用してnode.jsでエラーを取得する

  27. 27

    node.jsで応答ヘッダーを取得する方法

  28. 28

    typescriptを使用してnode.jsの他のパラメータで画像ファイルを取得するにはどうすればよいですか?

  29. 29

    Node.jsでbashコマンドを実行して終了コードを取得する

ホットタグ

アーカイブ