Bookshelf で Bluebird Promise を使用する場合、開発者はよく以下のようなパターンを使用します:
var getEvents = function(participantId) { return new models.Participant() .query({where: {id: participantId}}) .fetch({withRelated: ['events'], require: true}) .then(function(model) { return model; }); };
ただし、このコードは、Promise に慣れていない人にとっては疑問が生じます。 then 関数はコードの全体的な動作に何らかの意味のある影響を与えますか?次の実装は、それなしでも同じ結果を達成できますか?
var getEvents = function(participantId) { return new models.Participant() .query({where: {id: participantId}}) .fetch({withRelated: ['events'], require: true}); };
問題の核心は、then に渡される関数パラメーターにあります。この引数は、チェーン内の先行する Promise の戻り値を受け取ることが期待されます。したがって、戻り値は a; であるように見えます。 then 関数内のステートメントは、受け取った引数を変更せずに渡すだけなので、基本的に何も行われません。
見かけの冗長性にもかかわらず、then 関数は機能します。特定の使用例における目的。 1 つの例は、返された Promise をチェーンの下で別の方法で処理する必要がある場合です。たとえば、ログに記録したり、JSON に変換したり、カスタム方法で処理したりできます。もう 1 つの利点は、then 関数でエラー処理ができることです。これは、使用されている Promise ライブラリに応じて、done によっても実現できます。
一般に、次のことのみをお勧めします。本当に必要な場合に使用してください。不必要な then 関数は、コードベースに不必要な複雑さを追加し、エラーの可能性を高める可能性があります。一般的な経験則として、返された Promise の結果またはエラーを明示的に変更または処理する必要がある場合にのみ then を組み込みます。
以上が「.then(function(a){ return a; })」は実際に Promise に対して何かを行うのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。