2016-04-04 4 views
0

Я пытаюсь сделать 3 вызова API, а затем вернуть массив всех данных. Однако console.log() (и, следовательно, функция return) пуст, поскольку он не ожидает разрешения вызова AJAX, но я не могу сделать это в цикле, поскольку мне нужны все данные.Ожидание ответа нескольких обещаний в EmberJS

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 
    }); 
});