让我认为我正在异步读取文件500 MB。这需要时间来阅读。现在在异步读取文件时,如何停止/中止读取文件并调用回调函数(即successfulAbort)?如何在node.js中停止/中止读取文件
fs.readFile(filePath, function(err, data) {
//Do work
});
让我认为我正在异步读取文件500 MB。这需要时间来阅读。现在在异步读取文件时,如何停止/中止读取文件并调用回调函数(即successfulAbort)?如何在node.js中停止/中止读取文件
fs.readFile(filePath, function(err, data) {
//Do work
});
只要使用fs.read
(与fs.open
),而不是fs.readFile
。例如:
fs.open(filepath, 'r', function(err, fd) {
var finalize = function(buffer) {
fs.close(fd);
console.log(buffer);
};
if (err) {
finalize();
return;
}
fs.fstat(fd, function(err, stats) {
if (err) {
finalize();
return;
}
var bufferSize = stats.size,
chunkSize = 512,
buffer = new Buffer(bufferSize),
bytesRead = 0;
var inner_read = function() {
if ((bytesRead + chunkSize) > bufferSize) {
chunkSize = (bufferSize - bytesRead);
};
if (chunkSize > 0) {
fs.read(fd, buffer, bytesRead, chunkSize, bytesRead, function(err) {
// YOU CAN DO SOMETHING HERE TO STOP READING
if (err) {
finalize(buffer);
return;
}
bytesRead += chunkSize;
inner_read();
});
} else {
finalize(buffer);
}
}
inner_read();
});
});
嘿@frakish谢谢。我正在尝试你的榜样。我会尽快回复您。 – Somnath
fs.readFile
确实读取文件异步方式,但直到整个文件已被读取它不会调用你的回调,所以你不能用这种方法实现这一目标。相反,我相信你必须使用fs.createReadStream()
,它会给你一个stream.Readable
。然后你可以为这个对象实现适当的事件。
function readTheFile(fileName, callback) {
var stream = fs.createReadStream(fileName);
stream.on('readable', function() {}); // Do your read logic
stream.on('error', function(err) {}); // Handle the error
}
这个想法也很好看。我尚未完成实施。我会回到你们身边。 – Somnath
嗨,为什么你想中止操作? – karthick
读取文件时,我的应用程序可能会收到来自另一台服务器的停止信号,我应该立即停止读取文件(无需读取完整文件)。 – Somnath