2016-05-17 5 views
0

Angularプロジェクトでは、さまざまなシナリオを使用して予約システムに取り組んでいます。約束の応答に基づいて、サーバーと別の呼び出しを試みる必要があります。これはコールバックのような結果をもたらします。私は、私の約束が私を防ぐことができると考えていました。関数は何も返しませんが、別の関数を開始します。取得の予約の詳細ネストされた約束事を用いた機能プログラミング

  • 1.1.1(成功) -

      1. メイク

        • 1.1(大成功)を予約:ここ

          が簡略化決定木であります - ユーザーに予約詳細を表示
        • 1.1.2(失敗) - ショーの再試行ボタン
      2. 1.2(失敗) - のerrorCodeをチェック

        • 1.2.1であれば(errorCodeを=== 'SOLDOUT')
          • 1.2.1.1 - 代替予約を試す
          • 1.2.1.1.1(succes)ロード予約の詳細
          • 1.2.1.1.1.1(成功)CheckPriceDifference()
          • 1.2.1.1.1.2(失敗)show soldOutMessage();
        • 1.2.2

      3. 場合(errorCodeを!= 'SOLDOUT') *ショーの再試行ボタンをクリックします。

        makeBooking() 
        .then(function(response){ 
            succesHandler(response); 
        }, function(error){ 
            errorHandler(response); 
        }) 
        
        succesHandler(response){ 
            loadDetails(response) 
             .then(function(details){ 
              showDetails(details); 
            }, function(error){ 
              handleDetailsError(error); 
            } 
        } 
        
        errorHandler(response){ 
            if (checkSoldout(reponse)){ 
              makeAlternativeBooking(); 
            } 
        } 
        

        が、これはこれらの 'ネストされた' 約束で動作するように良い(機能)の方法である:

私のコードは次のようになりますか?あなたのフローが各ポイントで発散

+0

、あなたのロジックだけです関連するビット – Paarth

+0

Promiseハンドラから常に戻ります。そうでなければ、 'makeBooking()'の結果は、successHandlerかerrorHandlerのどちらかの結果が解決/拒否されるのを待つことはありません。 –

答えて

1

少しのように短くすることができ、除いて、あまり変化は、あなたのコードを実行できます。私は約束でこれを非難しないでしょう

makeBooking().then(succesHandler, errorHandler) 

succesHandler(response){ 
    loadDetails(response) 
     .then(showDetails, handleDetailsError) 
} 

errorHandler(response){ 
    if (checkSoldout(reponse)){ 
      makeAlternativeBooking(); 
    } 
} 
関連する問題