2014-06-11 46 views
0

處理我已經來到跨幾個答案和意見建議,以避免嵌套的NodeJS回調。我相信背後有一個強烈的觀點,但我無法正確理解!嵌套回調和例外的NodeJS

讓我們假設我有以下代碼

module1.func1(
    function(){ 
     //some code 
     module2.func2(
      function(){ 
       //some code 
       module3.func3(etc....) 
      } 
     ); 
    } 
); 

現在讓我們假設,我會在回調中編寫的代碼可能會導致隨後的異常try和catch必須添加到代碼

module1.func1(
    function(){ 
     try{ 
      //some code 
      module2.func2(
       function(){ 
        try { 
         //some code 
         module3.func3(etc....) 
        } catch (ex){//handle exception} 
       } 
      ); 
     } catch(e){//handle exception} 

    } 
); 
現在

,我不僅有嵌套的回調,但也有例外的,處理的回調,其上添加更多的內存開銷!

一些建議使用步驟,異步,等待換,但我不相信他們是從性能的角度來看好的解決辦法,因爲它們只提供簡單的語法,就是這樣。如我錯了請糾正我。

有什麼辦法來避免這樣的問題?提高回調的性能 - 嵌套代碼?

+0

承諾是解決這個問題。 – elclanrs

回答

4

Promises自動傳播異步和同步錯誤

這是什麼意思?

這意味着代碼的回調代碼,希望正確傳播錯誤:

try { 
    doStuff1(function(err, value) { 
     if (err) return caller(err); 
     try { 
      doStuff2(value, function(err, value2) { 
       if (err) return caller(err); 
       try { 
        doStuff3(value2, function(err, value3) { 
         if (err) return caller(err); 
         caller(null, [value3]); 
        }); 
       } catch(e) { 
        caller(e); 
       } 
      }); 
     } catch (e) { 
      caller(e); 
     } 
    }) 
} catch (e) { 
    caller(e); 
} 

可以替換爲:

// Returning a value normally to the caller 
return doStuff1() 
.then(function(value) { 
    return doStuff2(value); 
}) 
.then(function(value2) { 
    return doStuff3(value2); 
}) 
.then(function(value3) { 
    return [value3]; 
}); 
相關問題