2016-05-31 16 views
0

私のルートモデルで私は2つの要求(前と最新)を送信する必要があり、他の要求(baselineCpatureとcurrentcapture)。私は両方の要求の応答を得たとき、私は2つの他の要求(fiberHealthData、wavelengthsPerSectionData)を送る必要があります。モデルは戻るべきである(baselineCpature、currentcapture、fiberHealthData、wavelengthsPerSectionData)。 ここで私が持っている1つの問題は、私がbaslineCpatureとcurrentcaptureに対する応答を取得するとすぐにテンプレートを更新したいということです。ネストされた約束を持ってルートでそれらを返すことは、そのモデルを使用してルートモデルとテンプレートを更新しません

ここに私のコードです。誰かが私に何が間違っているのかを教えてもらえると感謝します。

model: function (params,transition) { 
 

 
    var promiseA=null; 
 
    var promiseB=null; 
 
    var promiseA1=null; 
 
    var promiseB1=null; 
 

 
    promiseA1 = Ember.RSVP.hash({ 
 
    latest:this.store.findAll('latest'), 
 
    previous: this.store.findAll('previous'), 
 
    }); 
 

 
    promiseA= promiseA1.then((promiseAResolved) => { 
 
    return Ember.RSVP.hash({ 
 
     baselineCapture:self.store.find('capture', promiseAResolved.previous.get('firstObject.id')), 
 
     currentCapture: self.store.find('capture', promiseAResolved.latest.get('firstObject.id')), 
 
    }); 
 
    }); 
 

 
    promiseB= promiseA.then((promiseAResolved) => { 
 
    baselineId = promiseAResolved.baselineCapture.id; 
 
    currentId = promiseAResolved.currentCapture.id; 
 

 
    return Ember.RSVP.hash({ 
 
     fiberHealthData:self.store.findAll('fiber-health',{ adapterOptions: {current: currentId, baseline: baselineId}}), 
 
     wavelengthsPerSectionData:self.store.findAll('wavelengths-per-section',{ adapterOptions: {current: currentId, baseline: baselineId}}) 
 
    }); 
 
    }); 
 

 
//this should be retun of my model 
 
    return Ember.RSVP.hash({ 
 
    baselineCapture:promiseA.baselineCapture, 
 
    currentCapture:promiseA.currentCapture, 
 
    fiberHealthData:promiseB.fiberHealthData, 
 
    wavelengthsPerSectionData:promiseB.wavelengthsPerSectionData, 
 
    }); 
 
}

+1

あなたがpromiseA'と '' promiseB'の結果を使用しています。 – Kingpin2k

答えて

1

さて、最初にこれはあなたが何をすべきかです:

const {hash} = Ember.RSVP; 

return hash({ 
    latest:this.store.findAll('latest'), 
    previous: this.store.findAll('previous'), 
}).then(({latest, previous}) => hash({ 
    baselineCapture:self.store.find('capture', previous.get('firstObject.id')), 
    currentCapture: self.store.find('capture', latest.get('firstObject.id')), 
})).then(({baselineCapture, currentCapture}) => { 
    let current = currentCapture.id; 
    let baseline = baselineCapture.id; 
    return hash({ 
     currentCapture, 
     baselineCapture, 
     fiberHealthData:self.store.findAll('fiber-health',{ 
      adapterOptions: {current, baseline} 
     }), 
     wavelengthsPerSectionData:self.store.findAll('wavelengths-per-section', { 
      adapterOptions: {current, baseline} 
     }), 
    }); 
}); 

はES6を使用して消滅のようにしています。これらのユースケースには非常に便利です!

有望な連鎖の仕組みを理解する必要があります。 Promises/A+を読んだことがありますか?それは私が今まで読んだことの中で最も優れた仕様の一つです。それを読んで!

あなたが間違っていたのはpromiseA.baselineCaptureです。プロンプトにアクセスするには、thenで解決しないとアクセスできません。ここ

+0

答えがうまくいくかどうかを見てみましょう。 –

0

は私が動作するようになったものです:彼らはあなたの最後のハッシュで解決した前

 return new Ember.RSVP.Promise(resolve => { 
 
      Ember.RSVP.hash({ 
 
      latest: this.store.findAll('latest'), 
 
      previous: this.store.findAll('previous'), 
 
      }).then((promiseA1Resolved) => { 
 
      Ember.RSVP.hash({ 
 
       baselineCapture:self.store.find('capture', promiseA1Resolved.previous.get('firstObject.id')), 
 
       currentCapture: self.store.find('capture', promiseA1Resolved.latest.get('firstObject.id')), 
 
      }).then((promiseAResolved) => { 
 
       self.updateContext(promiseAResolved,self); 
 
       resolve({ 
 
       baselineCapture: promiseAResolved.baselineCapture, 
 
       currentCapture: promiseAResolved.currentCapture, 
 
       fiberHealthData:self.store.findAll('fiber-health',{ adapterOptions: {current: self.get('contextService._currentId'), baseline:self.get('contextService._baselineId') }}), 
 
       wavelengthsPerSectionData:self.store.findAll('wavelengths-per-section',{ adapterOptions: {current: self.get('contextService._currentId'), baseline: self.get('contextService._baselineId')}}) 
 
       }); 
 

 
      }); 
 
      }); 
 
     });

関連する問題