English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Try Catch no Node.js 是一种错误处理机制。当期望一段代码抛出错误并被try包围时,可以在catch块中解决代码段中抛出的任何异常。如果未以任何方式处理错误,程序将突然终止,这不是一件好事。
注意:最好将Try Catch no Node.js仅用于同步操作。我们还将在本教程中了解为什么不应该将Try Catch用于异步操作。
Node.js尝试捕获的示例
Por que não usar Try Catch do Node.js para capturar erros em operações assíncronas?
O que acontece com as exceções no código assíncrono?
在此示例中,我们将在尝试在同步读取文件的代码段周围使用Try Catch。
#example for Node.js Try Catch var fs = require('fs'); try{ // 文件不存在 var data = fs.readFileSync('sample.html'); } catch (err) { console.log(err); } console.log("Continuando com outras instruções...");
Quando o programa acima for executado...
Saída do Terminal
arjun@arjun-VPCEH26EN:~/nodejs$ node nodejs-try-catch-example.js { Error: ENOENT: no such file or directory, open 'sample.html' at Object.fs.openSync (fs.js:652:18) at Object.fs.readFileSync (fs.js:553:33) at Object.<anonymous> (/nodejs/nodejs-try-catch-example.js:5:16) at Module._compile (module.js:573:30) at Object.Module._extensions..js (module.js:584:10) at Module.load (module.js:507:32) at tryModuleLoad (module.js:470:12) at Function.Module._load (module.js:462:3) at Function.Module.runMain (module.js:609:10) at startup (bootstrap_node.js:158:16) errno: -2, código: 'ENOENT' sistema de chamadas: 'open' caminho: 'sample.html' Continuando com outras instruções..
Observe que o programa não termina inesperadamente, mas continua executando as instruções subsequentes.
Agora, vamos ver o que acontece se não usarmos try catch na mesma operação acima.
# erro sem Node.js Try Catch var fs = require('fs'); // Tentando ler o arquivo de forma síncrona, em vez de apresentar o arquivo var data = fs.readFileSync('sample.html'); console.log("Continuando com outras instruções...");
O código não possui mecanismo de tratamento de erros e o programa termina inesperadamente, sem executar as próximas instruções.
Quando o programa acima for executado...
Saída do Terminal
arjun@arjun-VPCEH26EN:~/nodejs$ node nodejs-try-catch-example-1.js /home/arjun/nodejs/nodejs-try-catch-example-1.js:1 (function (exports, require, module, __filename, __dirname) { # exemplo para Node.js Try Catch ^ SyntaxError: Token inválido ou inesperado at createScript (vm.js:74:10) at Object.runInThisContext (vm.js:116:10) at Module._compile (module.js:537:28) at Object.Module._extensions..js (module.js:584:10) at Module.load (module.js:507:32) at tryModuleLoad (module.js:470:12) at Function.Module._load (module.js:462:3) at Function.Module.runMain (module.js:609:10) at startup (bootstrap_node.js:158:16) at bootstrap_node.js:598:3
Considere o seguinte exemplo, onde tentamos usar uma função de callback para ler arquivos de forma assíncrona e lançar erros quando necessário. Em seguida, usamos um bloco 'tentar capturar' ao redor da tarefa, esperando capturar os erros lançados.
# Try Catch no Node.js com Função de Callback Assíncrona var fs = require('fs'); try{ fs.readFile('sample.txta', // função de callback function(err, data) { if (err) throw err; }); } catch(err){ console.log("In Catch Block") console.log(err); } console.log("Next Statements")
Saída do Terminal
arjun@arjun-VPCEH26EN:~/nodejs/try-catch$ node nodejs-try-catch-example-2.js Next Statements /home/arjun/nodejs/try-catch/nodejs-try-catch-example-2.js:8 if (err) throw err; ^ Error: ENOENT: arquivo ou diretório inexistente, abrir 'sample.txta'
Se você observar a saída, por favor, façaConsole.noif(err) throw errjá executadolog("Next Statements") ,porque, a leitura de arquivo é concluída de forma assíncrona e o controle não espera a conclusão da operação de arquivo, mas continua a executar a sentença next.Isso significa que o controle não está dentro do bloco try catch.Se ocorrer um erro durante a operação assíncrona, o controle não saberá de nenhum bloco try catch.Portanto, o bloco Try Catch que usamos não pode capturar erros que podem ocorrer durante a operação assíncrona, os desenvolvedores devem evitar usá-loTry Catch no Node.jsBlocoCapturaErros gerados por tarefas assíncronas。
Se você está confuso sobre o que acontece com as exceções em código assíncrono, esta é a resposta. Se você já usou a função de callback Callback e observou o objeto de erro como parâmetro, aqui é onde todos os erros ou exceções são reportados de volta ao Node.js.
Neste tutorial do Node.js – Try Catch no Node.js,aprendemos a usar Try Catch e os cenários onde não se usa Try Catch.