Vì vậy, tôi đã tự hỏi một cách tốt hơn (về tăng trưởng và hiệu năng của chồng) để đệ quy gọi một hàm theo khoảng thời gian đều đặn là gì? Ví dụ: , cho phép nói rằng tôi muốn đọc nội dung tệp cứ 200 ms một lần. Tôi có hai phương pháp sau đây và tự hỏi liệu chúng có khác nhau không?Chức năng gọi một cách đệ quy trong khoảng thời gian đều đặn
Phương pháp 1: Sử dụng ols đồng bằng setTimeout mà không process.nextTick
var fs = require('fs');
(function loop() {
// Print to time to indicate something is happening
console.log(new Date().toString());
// Read a 51MB file
fs.readFile('./testfile', function (err, data) {
if (err) console.log(err);
});
// Call the same function again
setTimeout(function() {
loop();
}, 200);
})();
Cách 2: Gọi process.nextTick bên setTimeout
var fs = require('fs');
(function loop() {
// Print to time to indicate something is happening
console.log(new Date().toString());
// Read a 51MB file
fs.readFile('./testfile', function (err, data) {
if (err) console.log(err);
});
// Call the same function again
setTimeout(function() {
process.nextTick(function() {
loop();
});
}, 200);
})();
Những gì tôi muốn biết là thêm process.nextTick bên trong setTimeout có giúp ích hay không? Sẽ gọi hàm bên trong process.nextTick sẽ làm giảm bớt việc sử dụng stack hay không?
Không trả lời bạn, nhưng bạn chắc chắn nên đặt 'setTimeout' trong hàm gọi lại của 'readFile'. –
Tôi không thấy bất kỳ cuộc gọi đệ quy nào tại đây. Vòng lặp cuộc gọi được gọi khi sự kiện thời gian chờ xảy ra, không phải từ bên trong hàm. Không thể gọi cho đến khi vòng lặp() trả về – jcoder