为了账号安全,请及时绑定邮箱和手机立即绑定

消除由于不可预见的错误而导致的一组功能的不完整执行(JavaScript)

消除由于不可预见的错误而导致的一组功能的不完整执行(JavaScript)

catspeake 2023-06-09 10:43:47
我仍在学习这门语言,而且我非常想知道当一个动作需要执行一系列函数时,确保所有函数都将执行或不执行的正确方法是什么。例如,我可能有一个调用某些 apply() 函数的 HTML 按钮:function apply() {  try {  // Check arguments, choose what exactly to do next through some IFs etc...  }  anotherFunction();}function anotherFunction() {  try {    // Request data from DB, process data received, update object variables, etc...  }  yetAnotherFunction();}function yetAnotherFunction() {  try {    // Update HTML  }  oneMoreFunction();}function oneMoreFunction() {  try {    // Update graph  }}所以这里的问题是,如果流程中的任何函数抛出错误,其余函数将不会执行它们应该执行的操作,因此整个 Apply 过程将被应用一些更改而中断(假设 HTML 正在更新)但是休息(图表)不是。我很想知道防止这种行为的最佳做法是什么?是的,我正在尽最大努力使用 try {} 并检查参数是否有错误等,但看起来我无法预见一切,我只需要一些方法来告诉代码“确保您可以执行所有功能,在如果出现任何错误,根本不要做任何事情”。请告知这里可以做什么?
查看完整描述

1 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

在考虑 try/catch 块时,您走的是正确的道路,但请注意我也使用了“catch”。通常(也许这甚至是强制执行的,我不记得了)你需要 catch 块和 try。


所以你的函数看起来像这样:


function async myFirstTryCatch() {

   try {

     // Make your request in the try block

     await requestCall();

   } catch(error){

      // Hey, my http call returned an error

      // Deal with the error here. Maybe show a toast, validate a form

      // Anything you need to not break the code and have good UX

      console.log(error)

   }

}

按照同样的思路,您可以让每个函数处理自己的 try/catch,或者在您的应用函数中控制它,以防某些链必须继续/停止相互依赖。


    function apply() {

        try {

           firstCall();

           functionThatRequiresFirstCalltoSucceed();

        } catch (error){

          //Will catch if either firstCall or  functionThatRequiresFirstCalltoSucceed fail

          console.log(error)

        }


        functionThatIndependsFromTheResultAbove();

    }

我希望这会帮助你建立关于 JS 错误处理的想法 :)


重要说明 如果您的代码进入 catch 块,它将认为错误已被处理并且不会传播!这是一个例子


function functionThatThrowsError(){

  try{

    throw new Error('Example Error!');

  } catch (error) {

     // Error has been dealt with

     console.log(error) // Returns "Example Error"


     // throw error;   <--- Throw the error in the catch block if you need t to propagate

  }

}


 function wontCatchError() {

   try {

      functionThatThrowsError();

   } catch (error) {

      // THE CODE WILL NOT ENTER THE CATCH BLOCK

      // SINCE THE ERROR WAS CAUGHT IN THE FUNCTION ITSELF.


      // If you need to catch here as well, make sure to throw the error

      // in the catch block of the 'functionThatThrowsError'

      console.log(error)

   }

 }


查看完整回答
反对 回复 2023-06-09
  • 1 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信