[英]Ember chained promises
我有一个我知道不是很有挑战性的问题。 但是由于某种原因,我很难提出一个好的解决方案。 我需要从URL提取数据。 但是,URL本身是从另一个端点获取的。 因此,首先,我从服务器获取一个包含URL的对象。 获取URL后,我将访问获取的URL,该URL最终将给我所需的数据。 数据包含其他URL,我最终必须获取这些URL。 如何从余烬路线模型挂钩中获取所有这些数据?
model(params) {
let futureData = new Ember.RSVP.Promise((resolve,reject) => {
api.ajaxGet(
`${api.buildV3EnterpriseUrl('reports')}` + '/' + params.report_id
).then(function (successVal) {
resolve(successVal);
}, function (error) {
reject(error);
});
});
futureData.then((success) => {
return
api.xmlRequest('GET',success.aggregationUrls.elements[0].url);
})
return Ember.RSVP.hash({
reportData: futureData
});
}
您只忘记了一点点:
reportData = futureData.then(…)
then
,调用futureData
promise不对其进行futureData
,它将为回调结果返回一个新的promise。 您忽略了该返回值。
然后,在还修复了Promise
构造函数antipattern之后 ,它看起来像这样:
model(params) {
const futureData = api.ajaxGet(`${api.buildV3EnterpriseUrl('reports')}/${params.report_id}`);
const futureReportData = futureData.then(success => {
return api.xmlRequest('GET',success.aggregationUrls.elements[0].url);
});
return Ember.RSVP.hash({
reportData: futureReportData
});
}
也可以缩短为
model(params) {
return api.ajaxGet(api.buildV3EnterpriseUrl('reports') + '/' + params.report_id)
.then(success => api.xmlRequest('GET',success.aggregationUrls.elements[0].url))
.then(reportData => ({reportData}));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.