jquery 承诺函数链接
jquery promise function chaining
我正在尝试创建一系列链接在一起的函数。以下是我想要的,但我希望能够单独调用任何函数来启动序列。例如,如果我调用 one(),它将 运行 one(),然后是 two(),然后是 three(),然后是 complete()。如果我调用 three(),它会 运行 three 然后 complete()。有没有一种方法可以 'link' 每个函数到它下面的函数而不像 one().then(two).then(three).then(complete);
那样调用它,而是只调用一个(),或者只调用两个()等?
function one() {
var d = $.Deferred();
console.log('one');
setTimeout(function() {
d.resolve();
}, 5000);
return d.promise();
}
function two() {
var d = $.Deferred();
console.log('two');
setTimeout(function() {
d.resolve();
}, 5000);
return d.promise();
}
function three() {
var d = $.Deferred();
console.log('three');
setTimeout(function() {
d.resolve();
}, 5000);
return d.promise();
}
function complete() {
console.log('done');
}
one().then(two).then(three).then(complete);
假设顺序始终相同,只需在每个内部添加一个 then()
并在那里按顺序调用下一个。
function one() {
var d = $.Deferred();
console.log('one');
setTimeout(d.resolve, 1000);
return d.promise().then(two);
}
function two() {
var d = $.Deferred();
console.log('two');
setTimeout(d.resolve, 1000);
return d.promise().then(three);
}
function three() {
var d = $.Deferred();
console.log('three');
setTimeout(d.resolve, 1000);
return d.promise().then(complete);
}
function complete() {
console.log('done');
}
one();
setTimeout(()=>{console.log('Start at three'); three()}, 5000)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
我正在尝试创建一系列链接在一起的函数。以下是我想要的,但我希望能够单独调用任何函数来启动序列。例如,如果我调用 one(),它将 运行 one(),然后是 two(),然后是 three(),然后是 complete()。如果我调用 three(),它会 运行 three 然后 complete()。有没有一种方法可以 'link' 每个函数到它下面的函数而不像 one().then(two).then(three).then(complete);
那样调用它,而是只调用一个(),或者只调用两个()等?
function one() {
var d = $.Deferred();
console.log('one');
setTimeout(function() {
d.resolve();
}, 5000);
return d.promise();
}
function two() {
var d = $.Deferred();
console.log('two');
setTimeout(function() {
d.resolve();
}, 5000);
return d.promise();
}
function three() {
var d = $.Deferred();
console.log('three');
setTimeout(function() {
d.resolve();
}, 5000);
return d.promise();
}
function complete() {
console.log('done');
}
one().then(two).then(three).then(complete);
假设顺序始终相同,只需在每个内部添加一个 then()
并在那里按顺序调用下一个。
function one() {
var d = $.Deferred();
console.log('one');
setTimeout(d.resolve, 1000);
return d.promise().then(two);
}
function two() {
var d = $.Deferred();
console.log('two');
setTimeout(d.resolve, 1000);
return d.promise().then(three);
}
function three() {
var d = $.Deferred();
console.log('three');
setTimeout(d.resolve, 1000);
return d.promise().then(complete);
}
function complete() {
console.log('done');
}
one();
setTimeout(()=>{console.log('Start at three'); three()}, 5000)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>