我从node.js开始,试图将try..catch与文件系统方法一起使用。这就是我所拥有的:
let fs = require("fs");
const util = require('util');
let buf = new Buffer(1024);
const open = util.promisify(fs.open);
const read = util.promisify(fs.read);
const close = util.promisify(fs.close)
async function main(){
console.log("Going to open an existing file");
try{
const fd = await open('input.txt', 'r+');
console.log("File opened successfully!");
console.log("Going to read the file");
try{
await read(fd, buf, 0, buf.length, 0);
if(bytes > 0)
console.log(buf.slice(0, bytes).toString());
}
catch(e){
console.log("Error");
}
}
catch(e){
console.log("Error");
}
}
main();
console.log("Program ended");
执行该命令时,它会转到第二个捕获位置,并且不会打印任何内容。
答案 0 :(得分:2)
使用更新的代码,我看到的唯一错误是来自未声明的bytes
变量。
await read(fd, buf, 0, buf.length, 0);
将返回一个具有以下值的值:
{
buffer: bufferData,
bytesRead: numberOfBytes
}
因此,在异步代码中,您需要获取这些代码并使用它们:
try{
let ret = await read(fd, buf, 0, buf.length, 0);
if(ret.bytesRead > 0)
console.log(buf.slice(0, ret.bytesRead).toString());
}
当然,您也可以只打印从read()
返回的缓冲区。
在catch
块中打印错误也将很有帮助:
catch(e){
console.log("Error", e);
}
此外,如果您希望console.log
在正确的时间结束,则应该使用类似的方法:
main().then(() => console.log("Program ended")) ;