Asked May 15th, 6:47 AM 105 0 1
  • 105 0 1
+1

Javascript setInterval() not working in event socket.on()

Share
  • 105 0 1

Chào mọi người mình đang làm việc vơi Nodejs và gặp lỗi function setInterval() lại không họat dộng được trong event của socketio. Cụ thể mình đang lấy dữ liệu từ phần cứng gửi lên web và sau 10s mình lại lấy cái dữ liệu đó lưu vào db 1 lần. (Dữ liệu đang gửi lên là 1s 1 lần) code của mình như sau:

    socket.on('send_info', function(data) {
    	console.log(data);

        setInterval(handleData, 10000, data);
    	socket.broadcast.emit('show-info', data);
    });

    function handleData(data) {
        console.log('save data: ', data.random);
    }

Lỗi ở đây là hàm setInterval() chỉ hoạt động được đúng một lần đầu tiên. Tức là 10s đầu tiên thì chạy function handleData(). Còn sau đó function này chạy liên tục. 😦 Mình cũng chưa hiểu tai sao lại như vậy. Mong mọi người giải đáp giúp mình ạ. Cảm ơn mọi người.

1 ANSWERS


Answered May 15th, 7:05 AM
Accepted
+7

Vì mỗi giây bạn lại gửi event send_info 1 lần nên cứ 1 giây bạn lại tạo thêm 1 cái interval nữa nên bạn chỉ thấy nó delay 10s ở lần đầu tiên, sau đó là mấy cái interrval được tạo ra lần lượt chạy liên tục.

setInterval của bạn phải nằm ở ngoài cái event handler và data của mỗi event bạn phải lưu vào đâu đó để xử lý trong mỗi interval. Bạn thử làm thế này xem.

const buffer = [];

socket.on('send_info', function (data) {
    buffer.push(data)

    // ...
});

setInterval(function () {
    const data = buffer.splice(0, buffer.length);

    console.log(data);
}, 10000);
Share
Danh Lợi @danhloimta
May 15th, 7:18 AM

Em cảm ơn a nhiều ạ. E hiểu rồi ạ.

+1
| Reply
Share