2017-07-26 10 views
0

拒否権を扱わない状況では、約束執行者に拒絶を含める必要がありますか?例えばexpress.jsでは、私が約束を使用すると、executorにreject()を含める必要がありますか?

new promise ((res)=>{ 
    res(a); 
}) 
+0

これを見てください:https://gist.github.com/domenic/3889970 –

+0

あなたのタイトルを改めて言いたいことはありますか? – James111

+0

@DavidFarrugia、それは良い記事です! – phaneven

答えて

0

約束が拒否されないことが分かっている場合は、拒否ハンドラを追加する必要はありません。例えば。コードのエラー投げ作品ではラップではないとして、拒否ハンドラを提供していないことはほとんど同じである他のすべての場合には

Promise.resolve("abc") 
    .then(result => console.log(result)); 

:これが拒否されることはありませんし、拒否ハンドラを追加すると、プレーン愚かなことでしょう明らかですtry-catch。もちろん、意図的なこともありますが、node.jsは未処理の約束拒否を未知のエラーであるかのように扱います:node.jsプロセスを終了することによって。これは、未処理の約束の拒否が発生したときにコンソールに表示される内容です。

(ノード:7741)DeprecationWarning:未処理の約束拒否は廃止されました。将来、約束されていない拒否は処理されず、Node.jsプロセスはゼロ以外の終了コードで終了します。

ので、合算:

  • あなたは拒絶が不可能であるという事実を知ったときに拒否ハンドラをスキップし、
  • あなたは、将来のバージョンで(アプリケーションが却下時に終了することが必要な場合拒否ハンドラをスキップNode.js)、
  • 他のすべてのケースでは、拒否ハンドラを書きます。

EDIT(編集が行われた後の質問は答えに私の更新、したがって、より明確になりました):

約束エグゼキュータにreject()コールを含むためとして、いや、あなたはそれを追加する必要はありません。ただし、内部ロジックによってresolve()が常に呼び出されることを保証する必要があります。

+0

返信いただきありがとうございます! – phaneven

0

それは、必要はありませんが、それはエラーを処理するための非常にエレガントな方法はありません - エラーがあなたの約束が保留されながら、あなたには、いくつかの他のを取るしたいと思うスローされた場合約束を拒否し、ユーザーに何が間違っているかを知らせる。

MDN Promise Docsを見ると、Promisesでのエラー処理の概念が説明されています。

関連する問題