2011-06-18 30 views
6

Xin chào Chúng tôi đang phát triển ứng dụng trong node.js, socket.io và redis.cách xóa giờ trong node.js

chúng ta có thủ tục này:

exports.processRequest = function (request,result) { 
    var self = this; 
    var timerknock; 
    switch(request._command) { 
    case 'some command': // user login with username 
      // some statement 
      timerknock=setTimeout(function() { 
       //some statemetn 
      },20*1000); 
     case 'other command ': 
      // some statement  
      clearTimeout(timerknock); 
     } 
}; 

nhưng khi nó hủy hẹn giờ nó không phải là nhận được hủy bỏ khi lệnh khác được thực thi, những gì tôi nên làm gì để hủy hẹn giờ?

Trả lời

10

Có vẻ như bạn không có câu hỏi break, điều này sẽ gây ra sự cố (khi bạn thử và xóa bộ hẹn giờ sẽ tạo bộ hẹn giờ mới và xóa bộ hẹn giờ, nhưng bộ nhớ cũ vẫn chạy). Có lẽ đó là lỗi đánh máy.

Vấn đề chính của bạn là bạn đang lưu bộ hẹn giờ "tham chiếu" trong biến cục bộ. Điều đó cần phải được bao gồm hoặc toàn cầu, nếu không khi bạn thực hiện chức năng để xóa biến, timerknock đã mất giá trị của nó và sẽ cố gắng và clearTimeout(undefined) đó là tất nhiên, vô ích. Tôi đề nghị đóng một cách đơn giản:

exports.processRequest = (function(){ 
    var timerknock; 
    return function (request,result) { 
     var self = this; 
     switch(request._command) { 
     case 'some command': // user login with username 
     // some statement 
     timerknock=setTimeout(function() { 
      //some statemetn 
     },20*1000); 
     case 'other command ': 
     // some statement  
     clearTimeout(timerknock); 
     } 
    }; 
})(); 

Lưu ý rằng đây cũng là cách tiếp cận rất đơn giản và nếu bạn đặt hẹn giờ trước khi thực hiện xong thì bạn sẽ mất tham chiếu đến bộ hẹn giờ đó. Điều này có thể không phải là một vấn đề đối với bạn, mặc dù bạn có thể thử thực hiện điều này một chút khác nhau, với một đối tượng/mảng tham chiếu bộ đếm thời gian.

Các vấn đề liên quan