讓我認爲我正在異步讀取文件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