等待 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
});
});
我正在尝试进行 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
});
});