首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >余烬链子承诺

余烬链子承诺
EN

Stack Overflow用户
提问于 2017-05-10 19:08:39
回答 1查看 923关注 0票数 1

我有一个问题,我知道不是很有挑战性。但出于某种原因,我很难找到一个好的解决方案。我需要从URL中获取数据。然而,URL本身是从另一个端点获取的.因此,首先我从服务器获取一个包含URL的对象。在获得URL后,我访问了获取的URL,这最终给了我所需的数据。这些数据包含了更多的URL,我最终必须获取这些URL。如何从ember路由的模型钩子中获取所有这些数据?

代码语言:javascript
复制
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
});

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-10 19:44:36

你只忘了一点:

代码语言:javascript
复制
reportData = futureData.then(…)

then承诺调用futureData不会改变它,它将返回回调结果的新承诺。你忽略了那个返回值。

然后,在修复 constructor antipattern之后,它看起来如下所示:

代码语言:javascript
复制
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
    });
}

也可以缩短为

代码语言:javascript
复制
model(params) {
    return api.ajaxGet(api.buildV3EnterpriseUrl('reports') + '/' + params.report_id)
    .then(success => api.xmlRequest('GET',success.aggregationUrls.elements[0].url))
    .then(reportData => ({reportData}));
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43900871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档