我尝试使用一系列请求来构建模型,然后再将其绑定到我的视图。我很难理解如何利用一个请求的响应来发出下一个请求。我的问题是我的赞助商"和"经理"属性解析为承诺而不是响应。
$.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();
如何确保返回数据而不是承诺?
答案 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
});