19108


**catchメソッドの動作確認中、`Uncaught (in promise)` になりました**  
※但し、catchメソッドでエラー自体の捕捉は出来ています

**質問**  
・Promiseのthenメソッドは第2引数を指定しなくても、promiseが棄却済となった場合には必ず呼ばれるのでしょうか？  
・`Uncaught (in promise)` って何ですか？  
・JavaScriptエラー？ それともブラウザが独自実装している警告？  
※ブラウザはChromeです

* * *
[code]

    "use strict";
    hoge = new Promise(function (resolve, reject) {
        reject('テスト')
    })
    hoge.then(function (m) {
        alert(m);
    })
    hoge.catch(function (e) {
        alert("catch")
        alert(e)
        alert("catch")
    })
    
[/code]

Uncaught (in promise) テスト

* * *
[code]

    "use strict";
    hoge = new Promise(function (resolve, reject) {
        reject('テスト')
    })
    hoge.catch(function (e) {
        alert(e)
    })
    
[/code]

エラー発生しない


CC BY-SA 3.0
2015-11-20T23:51:47.500
19104
2015-11-22T01:55:34.440
7886
question
ecmascript-6
Promiseのthenメソッドは第2引数を指定しなくても、promiseが棄却済となった場合には必ず呼ばれるのでしょうか？


Promiseのthenメソッドは引数を省略した場合でも、コールバック関数が暗黙的に設定されます。これはEcmascript6の仕様で、ブラウザの独自実装ではありません。

このコードは、

[code]

    hoge.then(function (m) {
        alert(m)
    })
    
    hoge.catch(function (e) {
        alert("catch")
        alert(e)
        alert("catch")
    })
    
[/code]

これと等価です：

[code]

    hoge.then(function (m) {
        alert(m)
    }, function (e) {
        throw e
    })
    
    hoge.then(function (m) {
        return m
    }, function (e) {
        alert("catch")
        alert(e)
        alert("catch")
    })
    
[/code]

thenメソッドの第2引数を省略した場合、Promiseがrejectされるとデフォルトで引数がthrowされます。`Uncaught (in
promise)`が表示されるのはこれが原因です。

* * *

コメントへの補足:

シーケンスの途中で発生したエラーをまとめて処理したいときは、第二引数を省略して最後にエラー処理を行うことができます。

[code]

    hoge = Promise.resolve('test')
    
    hoge.then(function (m) {
        alert(m);
        return 'test1'
    }).then(function (m) {
        alert(m);
        return 'test2'
    }).then(function (m) {
        alert(m);
        throw 'error'
    }).then(function (m) {
        alert(m);
        return 'test3'
    }).catch(function (m) {
        alert(m);
    })
    
[/code]


CC BY-SA 3.0
2015-11-21T02:34:18.573
19108
2015-11-22T01:55:34.440
2015-11-22T01:55:34.440
3639
3639
19104
answer