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();
})