Jquery - 具有延迟和promises但没有setTimeout的链函数

时间:2016-08-23 12:16:28

标签: javascript jquery promise jquery-deferred

我需要一个接一个地执行2个函数,函数“A”中的东西在函数“B”中的东西执行之前完全完成...

我找不到一个没有使用setTimeout的例子..这很奇怪......

我有下面的例子(from here),它应该工作吗?我怎么能测试它是否正常工作?比方说,我可以使用什么虚拟代码来模拟“使用SharePoint JSOM执行操作”部分,耗时5秒到30秒。

var a = function() {
var defer = $.Deferred();

//do stuff with SharePoint JSOM

console.log('a() called');

return defer;
};

var b = function() {
var defer = $.Deferred();

console.log('b() called');


return defer;
};



a().then(b);

1 个答案:

答案 0 :(得分:4)

简单地使用promise vanilla JS )并将其与then链接起来。

function a() {
    return new Promise(function(resolve) {
        console.log("wait two seconds ...");

        // this timeout is only here for demo purpose ;)
        setTimeout(function() {
            console.log("A");
            resolve();
        }, 2000);
    });
}

function b() {
    console.log("B");
}

a().then(b);

如果你想使用jQuery deffered几乎一样。

function a() {
    var defer = $.Deferred();
    
    console.log("wait two seconds ...");

    // this timeout is only here for demo purpose ;)
    setTimeout(function() {
        console.log("A");
        defer.resolve();
    }, 2000);
    
    return defer;
}

function b() {
    console.log("B");
}

a().then(b);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>