亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

消除由于不可預見的錯誤而導致的一組功能的不完整執行(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 關注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號