Node.js NodeJS:等待跳过捕捉块并退出函数。为什么?
这是我的第一个问题,请给我反馈 所讨论的文件是一个非常大的文件,因此我考虑使用异步读取 预期行为: 成功:“等待”将导致代码执行阻塞,直到文件被读取 错误:即使等待失败,任何错误都应该被catch块捕获。console.log()应该指示正在捕获它 观察到:等待失败,完全跳过catch块,在Main的下一行继续执行。跳过整个异步函数。在调试器中,我可以看到结果中正确的输出仅在一瞬间出现,然后直接从函数中输出 有人能告诉我为什么会发生这种情况以及我如何解决它吗? 我的理解是,如果发生异常,catch块将始终捕获它。请尽可能详细和清晰地解释,我仍在努力掌握NodeJS语言 被注释掉的那一行是我认为做同样任务的另一种方式。它也面临同样的问题。它甚至跳过了一个“最终”块,而我也有一个 此外,Main中的“c”变量是调试器中的“挂起”承诺 最后,此代码的总体目的是以文本形式解析JSON文件。这只是一个更大文件的MVCENode.js NodeJS:等待跳过捕捉块并退出函数。为什么?,node.js,debugging,async-await,try-catch,node-promisify,Node.js,Debugging,Async Await,Try Catch,Node Promisify,这是我的第一个问题,请给我反馈 所讨论的文件是一个非常大的文件,因此我考虑使用异步读取 预期行为: 成功:“等待”将导致代码执行阻塞,直到文件被读取 错误:即使等待失败,任何错误都应该被catch块捕获。console.log()应该指示正在捕获它 观察到:等待失败,完全跳过catch块,在Main的下一行继续执行。跳过整个异步函数。在调试器中,我可以看到结果中正确的输出仅在一瞬间出现,然后直接从函数中输出 有人能告诉我为什么会发生这种情况以及我如何解决它吗? 我的理解是,如果发生异常,catc
const fs = require('fs');
const util = require('util');
async function uploadFile(fileName) {
try {
const readFile = util.promisify(fs.readFile);
result = await readFile(fileName, 'utf-8');
//result = await fs.readFileSync(fileName, 'utf-8');
jsonObj = JSON5.parse(result);
}
catch (err) {
console.log(err);
}
}
function Main() {
fileName = './Diagnostics_Data_Analysis/AddingToDynamoDB/diag.txt';
var c = uploadFile(fileName);
console.log("Done");
process.exit(0);
}
Main();
wait
不阻塞。它暂停本地函数和该函数的执行,然后立即返回一个承诺。调用方需要使用该承诺来知道操作何时完成。实际上,在文件读取完成之前,您正在调用process.exit()
。这里发生的是:
wait readFile(文件名为“utf-8”)
和uploadFile()
函数被挂起并立即返回承诺console.log(“完成”)
运行进程。退出(0)
运行async function Main() {
const fileName = './Diagnostics_Data_Analysis/AddingToDynamoDB/diag.txt';
const c = await uploadFile(fileName);
console.log("Done");
process.exit(0);
}
这将等待uploadFile()
函数在调用process.exit(0)
之前实际通知完成
p.S.Nodejs现在已经内置了fs
库的promise版本,因此您可以使用fs.promises.readFile()
,而不必制作自己的promisified版本