等待 EmberJS 中几个 promise 的响应

Waiting for the response of several promises in EmberJS

我正在尝试进行 3 次 API 调用,然后 return 一个包含所有数据的数组。但是,console.log()(因此函数 return)是空的,因为它没有等待 AJAX 调用被解析 - 但我不能在循环中这样做我需要所有数据。

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(),但我似乎无法让它工作...有人能指出我正确的方向吗?

实际上,除非您在路线的模型挂钩中,否则您不能等待承诺。 查看 the guide

上的模型挂钩

你还有一个选择,尝试在解析数据的时候直接给item设置数据。 (在 then 函数内)

您可以尝试这样的操作:

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

Return 一个承诺,并在所有内部承诺都得到解决后解决它。我没有尝试代码,但这应该会告诉你如何继续。

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