Ember返回模型有2个承诺

时间:2016-01-19 11:27:33

标签: javascript ember.js

我有一个路由类,在模板中,我使用自定义网格组件

{{my-grid params=this.gridParams elementId='myGrid'}}

现在,有两个AJAX调用来填充网格;

1. /getColumns (this column header data response is used to set some properties on my controller)
2. /getData (this body response is actually used to populate the grid with actual data and is actually computed to gridParams)

我正在阅读指南"路由器暂停承诺" https://guides.emberjs.com/v2.2.0/routing/asynchronous-routing/

但是,这是针对单个promise / ajax调用的。

我怎样才能让它在我的案例中发挥作用?

更新

我常见的单一POST请求

doPostReq: function(postData, requestUrl){
var promise = new Ember.RSVP.Promise(function(resolve, reject) {
    return $.ajax({            
    }).success(resolve).error(reject);
})

return promise;
},

1 个答案:

答案 0 :(得分:3)

如果您有两个或两个以上的承诺,并想知道他们何时解决使用RSVP.hashRSVP.all

model() {
 return Ember.RSVP.hash({
   columns: this.getColumns(),
   data: this.getData()
 });
}
现在,您可以在控制器中

使用已解决的承诺,例如model.columnsmodel.data

<强>更新
如果你想要串行执行(一个接一个的承诺),你可以这样做:

model() {
 let data;
 return this.getData().then(function(d){
   data = d;
   return this.getColumns();
 }).then(function(columns){
   return { columns, data };
 });
}