簡體   English   中英

等待EmberJS中的一些承諾的回應

[英]Waiting for the response of several promises in EmberJS

我正在嘗試進行3個API調用,然后返回所有數據的數組。 但是,console.log()(因此函數返回)為空,因為它不等待解析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(),但似乎無法正常工作……有人能指出我正確的方向嗎?

當所有內在的承諾都得到解決時,返回一個承諾並解決它。 我沒有嘗試代碼,但這應該為您指出如何進行。

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

實際上,除非您處於路線的模型掛鈎中,否則您不能等待承諾。 參見指南模型鈎

您還有另一種選擇,請在解析數據后嘗試將數據直接設置為該項。 (在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;
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM