2016-04-04 88 views
0

我試圖做3個API調用,然後返回所有數據的數組。然而,console.log()(因此函數返回)是空的,因爲它不會等待AJAX​​調用被解析 - 但我無法在循環中完成,因爲我需要所有數據。等待EmberJS中幾個promise的響應

let data = []; 

parameters.forEach((parameter, index) => { 
    return Ember.$.ajax(url).then((response) => { 
    data.push({ 
     name: parameter.get('displayName'), 
     color: parameter.get('color'), 
     type: chart.get('chartType'), 
     turboThreshold: 0, 
     data: response.data 
    }); 
    }); 
}); 

console.log(data); 
return data; 

我想,我可以使用Ember.RSVP.hash()對於這一點,但我似乎無法得到它的工作...任何人都可以點我在正確的方向?

+0

'parameters'是一個數組,是嗎? –

+0

是的,它是通過Ember hasMany關係返回的對象數組 –

回答

0

其實你不能等待承諾,除非你在路線的模型鉤子。 請參閱模型掛鉤the guide

您有另一種選擇,嘗試在解析數據時直接將數據設置到該項目。 (該然後函數內)

0

你可以嘗試這樣的事:

return Promise.all(parameters.map(parameter => Ember.$.ajax(url).then(response => { 
    'name': parameter.get('displayName'), 
    'color': parameter.get('color'), 
    'type': chart.get('chartType'), 
    'turboThreshold': 0, 
    'data': response.data 
}))).then(data => { 
    console.log(data); 
    return data; 
}); 
1

回報承諾,解決它,當所有的內部承諾的方式進行解決。我沒有嘗試過這些代碼,但是這應該指出如何繼續。

return new Ember.RSVP.Promise(function (resolve) { //return a promise 
    let promises = []; 
    let data = []; 

    parameters.forEach((parameter, index) => { 
     promises[index] = Ember.$.ajax(url).then((response) => { //store all inner promises 
     data.push({ 
      name: parameter.get('displayName'), 
      color: parameter.get('color'), 
      type: chart.get('chartType'), 
      turboThreshold: 0, 
      data: response.data 
     }); 
     }); 
    }); 

    Ember.RSVP.all(promises).then(function(){ 
     resolve(data); //resolve the promise when all inner promises are resolved 
    }); 
});