正确承诺链接

时间:2014-07-11 18:25:00

标签: javascript promise

我尝试使用一系列请求来构建模型,然后再将其绑定到我的视图。我很难理解如何利用一个请求的响应来发出下一个请求。我的问题是我的赞助商"和"经理"属性解析为承诺而不是响应。

$.get("/projects/1")
.then(function(data){
  var manager = $.get("/employees/" + data.ProjectManagerId);

  data.manager = manager;
  return data;
})
.then(function(data){
  var sponsor = $.get("/employees/" + data.ProjectSponsorId);

  data.sponsor = sponsor;
  return data;
})
.then(function(data){
  //Bind data to view

  //data.manager is a promise
  //data.sponsor is a promise
})
.done();

如何确保返回数据而不是承诺?

1 个答案:

答案 0 :(得分:1)

在我看来,经理和赞助商的请求可以被并列化(同时执行)。

我在那里拍了when

$.get("/projects/1")
.then(function(data){
  var manager_req = $.get("/employees/" + data.ProjectManagerId);
  var sponsor_req = $.get("/employees/" + data.ProjectSponsorId);

  return $.when(data, manager_req, sponsor_req);
})
.then(function(data, manager, sponsor){
  data.sponsor = sponsor;
  data.manager = manager;
  return data;
})
.done(function(data){
  //Bind data to view

  //data.manager is resolved
  //data.sponsor is resolved
});

使用data嵌套时间承诺更好一点:

$.get("/projects/1")
.then(function(data){
  var manager_req = $.get("/employees/" + data.ProjectManagerId);
  var sponsor_req = $.get("/employees/" + data.ProjectSponsorId);

  return $.when(manager_req, sponsor_req).then(function(manager, sponsor){
    data.sponsor = sponsor;
    data.manager = manager;
    return data;
  });
})
.done(function(data){
  //Bind data to view

  //data.manager is resolved
  //data.sponsor is resolved
});
相关问题