なぜ、ネイティブプロミスは構文エラーに関してtry/catchのように振る舞うのですか?あなたが順序で非同期操作の数を実行する必要がある場合プロミスが構文エラーをキャプチャするのはなぜですか?
約束は明らかに、フローコントロールの値を持っています。しかし、すべての約束のためにあなた自身の不適切なエラー・インプリメンテーションを実装する必要があると、時にはそれを扱う手間がかかります。
は、次のコードを取る:
asdf
let one = new Promise((resolve, reject) => {
asdf
}).catch(err => {
console.log(err)
console.log(err.stack)
})
最初の構文エラーは、一般的なブラウザのエラーと18のエントリでスタックトレースを生成します。 promise'dバージョンは4です。
私の質問は、仕様書を作成してネイティブに実装するとき、ユーザー空間実装の約束のようなtry/catchのような機能を、フローに使用できるように保持していた理由です標準的なエラー処理を残しますか?
それは構文エラーはありませんが、将来的に参照エラー(おそらく)occuringので。 – Bergi
エラーは、SyntaxErrorsではなくReferenceErrorsであることに注意してください。後者は、エンジンがスクリプトを実行するのに十分理解できないため、捕まえられません。しかし、 'asdf'は有効な識別子であり、変数へのアクセスだけが有効なステートメントです。したがって、パーサーはそれに問題はないと判断します。 –
これが適切な複製であるかどうかは不明です。[なぜJSで約束を拒否するために例外が使用されるのですか?](http://stackoverflow.com/q/21616432/1048572) – Bergi