当2函数结束时,jquery执行某些操作?

时间:2015-06-26 14:10:24

标签: jquery

我有两个功能

function f1() {
}
function f2() {
}

我想在f1()和f2()完成时调用fend()

我正在寻找与其有关的“干净”解决方案。当时或承诺功能。

4 个答案:

答案 0 :(得分:1)

您可以做以下事情:

var state = 0;
function f1() {
    //Do something
    state++;
    fend();
}
function f2() {
    //Do something
    state++;
    fend();
}
function fend() {
    if (state == 2) {
        console.log("fend called");
        state = 0; //reset the state value
    }
}

当每个函数结束时增加一个var,然后调用fend()。如果状态为2,则表示已执行了2个函数。

JSFIDLE:http://jsfiddle.net/ghorg12110/tzr4kp4r/

答案 1 :(得分:1)

是使用deferred object并解决它们。一旦延迟解决,就使用jQuery when来触发回调。

https://jsfiddle.net/v9o7ry8a/2/

var f1 = function() {
        var d = $.Deferred();
        // A pretend async call
        setTimeout(function() {
            d.resolve();
        }, 1000);

        return d;
    },
    f2 = function() {
        var d = $.Deferred();
        d.resolve(); // This function resolves right away but f1 takes a second!
        return d;
    };

$.when(f1(), f2()).done(function() {
    // This is your 'fend' function
    alert('hi');
});

如果可能发生故障,您还应该处理故障等。如果您希望从.resolve功能中的f1f2访问数据,也可以使用参数调用fend

答案 2 :(得分:0)

我认为你可以这样做:

var check = false;
function f1(){
if(check == true)
fend();
else
check = true;
}

function f2(){
if(check == true)
fend();
else
check = true;
}

当两个功能第一个功能都完成时,检查将为真。 当第二次完成时,将会被召唤。

希望有所帮助

答案 3 :(得分:0)

这不仅限于jQuery,它只是JavaScript,但每次都可以测试一个布尔值。在任一函数的末尾,布尔值将设置为true:

var didEitherFunctionFinish = false;

function f1() {
    // f1()'s logic goes here

    if(didEitherFunctionFinish) {
        finalFunction();
    }

    didEitherFunctionFinish = true;
}

function f2() {
    // f2()'s logic goes here

    if(didEitherFunctionFinish) {
        finalFunction();
    }

    didEitherFunctionFinish = true;
}

function finalFunction() {
    // what happens after both f1() and f2() have been called
}

布尔值从false开始。在f1()或f2()的末尾,无论如何都设置为true。在此之前,运行测试以查看是否已完成任一功能。如果有,则调用finalFunction()。