2015-04-12 46 views
0

在文檔中我找不到在異步系列方法中處理錯誤的方法。 如何正確學習異步js,通常github維基百科對於不依賴於它的用戶而言,其平均值低於平均水平。如何處理asyncjs中的錯誤?

這裏是我的代碼:

function async1(cb,err) { 
    setTimeout(function() { 
     console.log(1); 
     cb(); 
    }, 1000); 
} 

function async2(cb,err) { 
    setTimeout(function() { 
     // console.log(2); 
     throw new Error; 
     cb(); 
    }, 1000); 
} 

function async3(cb,err) { 
    setTimeout(function() { 
     console.log(3); 
     cb(); 
    }, 1000); 
} 

async.series([ 
    async1, 
    async2, 
    async3 
], function (err) { 
    console.log(err); 
}); 

它只是終止,並拋出錯誤。

我幾個問題...

我是不是正確處理錯誤,顯然不正確,那麼有什麼不對?

For Async to work does the series used in series does it have have first parameter as callback?

如果是,那麼這是否意味着您不能將其與其他庫一起使用。因爲它們可能沒有回調作爲第一個參數。

+2

節點回調並不是安全的,你不能僅僅以這種方式在它們內部拋出異常(例如承諾 - 順便說一句),你需要嘗試/捕獲它們並用錯誤'cb(new Error)調用cb'而不是投擲它。請參閱http://stackoverflow.com/questions/14301839/javascript-asynchronous-exception-handling-with-node-js –

+0

我該如何處理asyncjs –

+3

這不是async.js錯誤。該錯誤在setTimeout中。正如Benjamin所提到的,你不能從異步函數中拋出錯誤。而是將錯誤作爲參數傳遞給您的回調。 – slebetman

回答

0

兩件事情:

1功能只需要CB參數沒有犯錯參數,所以它應該像function async1(cb){.代替function(cb,err){.和...

拋出錯誤你這個

cb(new Error) //as told in comments above.

而不是拋出新的錯誤。