2016-06-11 9 views
0

私は、Javascriptの約束を理解している問題を抱えています。Javascriptで約束を正しく連鎖させ、エラー処理をどうやって説明しますか?

function myPromise() { 
    return new Promise((resolve, reject) => { 
    setTimeout(function() { 
     console.log('done') 
     reject('resolved'); 
    }, 1000); 
    }); 
} 

function myOtherPromise() { 
    return new Promise((resolve, reject) => { 
    myPromise().then(done => { 
     resolve(done); 
    }).catch(e => { 
     console.log('In myOtherPromise, caught err: ', e); 
     reject(e) 
    }); 
    }); 
} 

myOtherPromise().then(done => { 
    console.log('done calling myOtherPromise: ', done); 
}).catch(e => { 
    console.log('caught err from myOtherPromise', err); 
}); 

出力ショー::次のコードで

done 
In myOtherPromise, caught err: resolved 

次が印刷されていない理由を私は理解していない:

'caught err from myOtherPromise' 

根本的な何かが私があるように私は感じますあまり得意ではない。 myOtherPromiseの拒否が最終的なcatchブロックに渡されないのはなぜですか?

+2

はconsole.logを(コールしようとしたとき、その関数がエラーをスローするので) 'にReferenceError:errがdefined'されていません。) – Thomas

+0

は[' Promise'コンストラクタアンチパターンを避けてください](http://stackoverflow.com/q/23803743/1048572)! – Bergi

答えて

4

変数をe変数にキャッチしますが、変数err(これは未定義で実行時エラーが発生します)を出力します。

.catch(e => { 
    console.log('caught err from myOtherPromise', err); 
}) 

は次のようになります。

.catch(e => { 
    console.log('caught err from myOtherPromise', e); 
}) 
+0

Derp!ありがとう:) – iamthegreenfairy

関連する問題