3

通常、2 つの Promise オブジェクトは関数呼び出し全体で作成されます。私は何が起こると予想されるかを示す約束をまとめました:

new Promise((resolve, reject) => {

    //function call with returned promise...

    return new Promise((resolve, reject) => {

      reject("rejectCall_2")  //Prints nothing

    })

}).catch( e1 => {
  console.log('e1',e1) 
})

これにより、拒否が親の約束に伝播されたはずです。外部の約束で rejectCall_2 をキャプチャするにはどうすればよいですか?

4

1 に答える 1

2

内部からは何も返しませんnew Promise。返すものは捨てるだけ、 やることは決意と拒絶。別の約束を含め、何かを「返す」場合は、その何かで解決します。

だからあなたが欲しいのは

new Promise((resolve, reject) => {
    //function call with returned promise...
    resolve(new Promise((resolve, reject) => {
    ^^^^^^^
      reject("rejectCall_2")
    }));
}).catch(e1 => {
  console.log('e1', e1) 
})

バベルノードでテスト済み。

FWIW、すぐに戻る太い矢印形式を使用して、いくつかの中括弧を節約することもできます。

new Promise((resolve, reject) => 
    resolve(new Promise((resolve, reject) => 
      reject("rejectCall_2")
    ));
).catch( e1 => console.log('e1',e1));

「明示的なプロミスコンストラクターのアンチパターン」の罪を犯している可能性があることを示唆するコメントに注意します。これは、最初に使用できた他のプロミスで解決または拒否するためだけにプロミスを構築する場所です。あなたの例は、特定の問題を紹介するために設計された人工的なものだと思います。

于 2015-07-09T16:06:06.590 に答える