Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 适当的承诺链_Javascript_Promise - Fatal编程技术网

Javascript 适当的承诺链

Javascript 适当的承诺链,javascript,promise,Javascript,Promise,在将模型绑定到视图之前,我尝试使用一系列请求来构建模型。我很难理解如何利用一个请求的响应来提出下一个请求。我的问题是,我的“担保人”和“管理人”财产作为承诺而不是回应来解决 如何确保返回数据而不是承诺?在我看来,经理和赞助商的请求可以并行(同时执行) 当在那里时,我会打一个: $.get("/projects/1") .then(function(data){ var manager_req = $.get("/employees/" + data.ProjectManagerId);

在将模型绑定到视图之前,我尝试使用一系列请求来构建模型。我很难理解如何利用一个请求的响应来提出下一个请求。我的问题是,我的“担保人”和“管理人”财产作为承诺而不是回应来解决


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

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

当在那里时,我会打一个

$.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
});

嵌套when承诺可以更好地处理
数据

$.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
});

$。是否在启动请求并等待其完成后再允许返回?这似乎是我丢失的位,尽管我同意并行位。
$。get
执行请求<代码>$。当
仅同步两个请求时。它返回一个承诺,当它的所有输入都已解析时,该承诺已解析。如果输入不是承诺(如第一个示例中的
数据
),则将其计为解析值。您是否知道这是标记为Q的,但这里没有一个Q承诺?谢谢Ben。我在我的应用程序中使用Q,但最终删除了简化示例中的引用。我会取下标签。
$.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
});