2016-11-08 85 views
0

我有這樣的代碼,因此存在發生錯誤,當我操縱try塊的catch塊不捕獲它們(例如錯誤的是,Facebook的SDK拋出)。我對使用try和catch結構並不瞭解如何處理facebook錯誤非常新穎。Catch塊沒有發現錯誤

try{ 

    window.fbAsyncInit = function() { 
     FB.init({ 
      appId  : 'XXXXXXXXXXXX', 
      xfbml  : true, 
      version : 'v2.7' 
     }); 
     FB.AppEvents.logPageView(); 

    }; 

    (function(d, s, id){ 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement(s); js.id = id; 
    js.src = $fbSource; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 

}catch(e){ 

    console.log('Error: '+e); 

} 
+0

向我們展示確切的位置導致錯誤被拋出。 –

+0

'catch'塊只捕獲拋出的錯誤,而不是facebook錯誤? – adeneo

+1

它不會趕上異步問題 – epascarello

回答

2

這是因爲當try塊被激活時錯誤沒有被拋出。在錯誤發生時(稍後,當Facebook調用您的fbAsyncInit函數時),代碼早已退出try塊。

如果你想捕獲這些錯誤,你需要內您fbAsyncInit回調try和/或在FB API指示的方式來接收錯誤,因爲大多數異步API,不能(自然)與try/catch兼容。

+0

@JuliusS:對於任何隱約現代的瀏覽器,您可以在['script'元素]上使用'onerror'回調(https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement)來加載Facebook,如果在合理的時間內沒有看到,也可能帶有onload和超時。 –

+0

@JuliusS:我依賴的評論似乎已被刪除,但希望以上內容有用。 –