繁体   English   中英

灰烬的诺言

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM