Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.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_Jquery_Promise_Jquery Deferred - Fatal编程技术网

Javascript 如何更改承诺链?

Javascript 如何更改承诺链?,javascript,jquery,promise,jquery-deferred,Javascript,Jquery,Promise,Jquery Deferred,在承诺链中,有没有办法让其中一个成员向该链添加承诺 这段代码更好地说明了我的意思: $.ajax(......).then(function(r){ ..... return r; }).then(function(r){ var d = $.Deferred(); // how to add d.promise() to this chain ? .... return r; }).then(function(r){ // this function sh

在承诺链中,有没有办法让其中一个成员向该链添加承诺

这段代码更好地说明了我的意思:

$.ajax(......).then(function(r){

  .....
  return r;

}).then(function(r){

  var d = $.Deferred();
  // how to add d.promise() to this chain ?
  ....
  return r;

}).then(function(r){

  // this function should be able to receive "r"
  // but should also wait for the promise above to complete :(

  ....
});

我对jQuery承诺没有太多的经验,但肯定可以用另一个承诺来兑现承诺,就像在这篇Ponyfoo文章中解释的那样


我希望您可以根据您的需要调整它,或者可能使用本机承诺来代替。

要从
返回
r
。然后()
,使用
.resolve()
$中的参数
r
。Deferred()
在开始之前
函数,从
返回
d.promise()
。然后()
用于在下一个
时访问
r
。然后()
在链中

 .then(function(r) {

  .....
    var d = $.Deferred(function(dfd) {
      // do stuff
      dfd.resolve(r)
    });
    // how to add d.promise() to this chain ?
    ....
    return d.promise();
 })
$。当(1)。然后(函数(r){
返回r;
}).然后(函数(r){
var d=$.Deferred(函数(dfd){
//做事
setTimeout(函数(){
dfd.resolve(r)
},Math.random()*2500)
});
//如何将d.promise()添加到此链?
//....
返回d.promise();
})
.然后(函数(r){
console.log(r)
})

中返回承诺。然后()
处理程序是链接新创建承诺的方式。这看起来是我的正确答案。请注意,您可以
返回d
,因为在jQuery中,延迟也是带有
then
的承诺。
 .then(function(r) {

  .....
    var d = $.Deferred(function(dfd) {
      // do stuff
      dfd.resolve(r)
    });
    // how to add d.promise() to this chain ?
    ....
    return d.promise();
 })