2017-04-12 6 views
0

私のコントローラは、以下のことを行い関数を呼び出すことによって活性化される:Restangular:複雑にネストされた要求を解決

  • は「//API /車:ID」の車を取得します
    • はその後、中の人を取得します車(車のオブジェクト内のそれぞれの人のために、 '/ API /人/:ID' を取得
      • その後、 '//API /子供:ID' を取得、人でそれぞれの子のために(人の子供を取得します)
  • 最後に、フェッチされた上記すべてのデータを含むオブジェクトを返します。

このロジックは複雑ですが、サーバーの現在のアーキテクチャでは、車の情報を取得する前に車に乗っている人がわからないため、これらをまとめて一歩ずつ進めることができます。サーバー上にフィルタを設定する必要はありません。したがって、一度に1つのオブジェクトを表示します。

私は、このロジックを工場、サービス、またはプロバイダに移したいと考えています。コントローラの初期化時に、サービス内の格納されたデータは注入によってアクセス可能でなければならない。

誰もこのような問題の経験があり、良い解決策を見つけましたか?これらの要求がすべてネストされたループになっていても、これらの要求が行われた後に解決する約束をどのように返すのですか?私は私の車のサービスで関数を呼び出すコントローラから

+0

だコードなし**通常の方法(:この関数、getFullCar()は、のように見えます?私があなたに話すことができる最高) –

+0

例を残すか、他の人がコミュニティに見えるように答えるようにしてください。このようなコメントは、将来これらの問題を探す可能性のある人には役立ちません。 –

+0

「コメントはこれらのものが好きです」あなたの誰かがあなたのために書いて欲しいものの「漠然とした概要」だけが表示されているあなたのような質問では最高のものが期待できます –

答えて

0

私が使用してきた現在の答えは次のようです。どのように私は、彼らがネストされたループにしているにもかかわらず、すべてのこれらの要求が行われた後に解決する約束を返します**

function getFullCar(id) { 
    var defer = $q.defer(); // set up promise 
    Car.get(id).then(carSuccess, carError); 
    return defer.promise; // promise that is being returned 

    ... // more nested get requests 

    // after every load I call a function checkLoaded() 
    function checkLoaded() { 
    if (//check variables are loaded) { 
     defer.resolve(// data to retun); 
    } 
    } 

} 
関連する問題