Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
jquery承诺函数链接_Jquery_Promise_Deferred - Fatal编程技术网

jquery承诺函数链接

jquery承诺函数链接,jquery,promise,deferred,Jquery,Promise,Deferred,我试图创建一系列链接在一起的函数。下面是我想要的,但我希望能够单独调用任何函数来启动序列。例如,如果我调用one(),它将运行one()、two()、three()、complete()。如果我调用three(),它将运行three然后complete()。有没有一种方法可以将每个函数“链接”到它下面的函数,而不必像调用one()。然后(两个)。然后(三个)。然后(完成)但只需一个()或两个()等 假设顺序始终相同,只需在每个顺序中添加一个then(),然后按顺序调用下一个 函数一(){ va

我试图创建一系列链接在一起的函数。下面是我想要的,但我希望能够单独调用任何函数来启动序列。例如,如果我调用one(),它将运行one()、two()、three()、complete()。如果我调用three(),它将运行three然后complete()。有没有一种方法可以将每个函数“链接”到它下面的函数,而不必像调用
one()。然后(两个)。然后(三个)。然后(完成)但只需一个()或两个()等


假设顺序始终相同,只需在每个顺序中添加一个
then()
,然后按顺序调用下一个

函数一(){
var d=$.Deferred();
console.log('one');
设置超时(d.resolve,1000);
返回d.promise(),然后返回(两个);
}
函数二(){
var d=$.Deferred();
console.log('two');
设置超时(d.resolve,1000);
返回d.promise(),然后返回(三);
}
职能三(){
var d=$.Deferred();
console.log('three');
设置超时(d.resolve,1000);
返回d.promise()。然后(完成);
}
函数完成({
console.log('done');
}
一个();
setTimeout(()=>{console.log('Start at three');three()},5000)

如果函数是同步的,而不使用承诺,您将如何解决相同的问题?是的,这就是我要寻找的。顺序总是一样的。非常感谢。
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);