我有一个问题,我知道不是很有挑战性。但出于某种原因,我很难找到一个好的解决方案。我需要从URL中获取数据。然而,URL本身是从另一个端点获取的.因此,首先我从服务器获取一个包含URL的对象。在获得URL后,我访问了获取的URL,这最终给了我所需的数据。这些数据包含了更多的URL,我最终必须获取这些URL。如何从ember路由的模型钩子中获取所有这些数据?
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
});
}发布于 2017-05-10 19:44:36
你只忘了一点:
reportData = futureData.then(…)对then承诺调用futureData不会改变它,它将返回回调结果的新承诺。你忽略了那个返回值。
然后,在修复 constructor 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}));
}https://stackoverflow.com/questions/43900871
复制相似问题