2017-09-29 15 views
0

以下のコードでは、クライアントが要求を終了した後もsetTimeout()が動作し続けます。どうやって止めるの?NodeJSは、要求が終了したときにsetTimeout()を終了します。

function doSomething(callback){ 
    console.log('Doing something...'); 
    callback(); 
} 

app.get('/', (req, res) => { 

    function waitTilDone(){ 
     setTimeout(function(){ 
      doSomething(waitTilDone); 
     }, 2000); 
    } 

    doSomething(waitTilDone) 

}); 
+0

イベントを「req」の 'close'と' end'にバインドして、タイムアウトをクリアすることができます。 –

+0

および/または '中止 '。 –

答えて

2

エクスプレスのRequestは、ノードのIncomingMessagecloseを有し、end、およびabortedイベントの拡張バージョンです。最も適切なイベントにフックし、タイムアウトをクリアします。例:

app.get('/', (req, res) => { 
    var timer = 0; 

    req.on('aborted', function() { 
     if (timer) { 
      clearTimeout(timer); 
     } 
    }); 

    function waitTilDone(){ 
     timer = setTimeout(function(){ 
      doSomething(waitTilDone); 
     }, 2000); 
    } 

    doSomething(waitTilDone) 

}); 
関連する問題