2017-06-27 20 views
0
var bar = Observable.create(function(observer){ 
     try{ 
      console.log('hello'); 
      observer.next(22); 
      throw new Error('bad bad bad'); 
      setTimeout(function(){ 
       observer.next(300); 
       observer.complete(); 
      },2000); 
     }catch(e){ 
      observer.error(e); 
     } 
    }); 
    bar.subscribe(
     function nextValueHandler(x){ 
      console.log(`out in handler${x}`); 
     }, 
     function errorHandler(err){ 
      console.log('is wrong'+err); 
     }, 
     function completeHandler(){ 
      console.log('over'); 
     } 
    ); 

私はangular2プロジェクトでrxjs api 5.0を使用しています。このコードは 'Unreachable code detected'というエラーになります。しかし、 'setTimeout ...'の中で '新しいエラーをスローする'を作成した場合、それ以前に 'setTimeout ...'に 'theow error ...'を作成できないのはなぜですか?angular2プロジェクトrxjs observableエラー

+2

わかりません。あなたが '新しいエラーを投げる 'ため、次の行には決して到達しません。したがって、 "*到達不能コード*"警告 – BeetleJuice

+0

コードは 'setTimeout()'に到達できません。条件なしでエラーをスローすると、常にスローされ、エラー以下のものはすべて実行されません。 –

答えて

0

throw errorは、後ろのコードを無視してcatchブロックにジャンプします。 returnと似ています。それはJavaScriptの動作です。したがって、setTimeoutは決して呼び出されません。

setTimeoutに追加すると、コールバックになるため、コードが到達不能かどうかをチェックしません。

関連する問題