在另一个函数执行后执行函数

3

我有这段JavaScript代码:

 if (direction !== "leftnav") { 
// DO THINGS
};
setTimeout(function () {
//DO OTHER THINGS AFTER THE FIRST THING
}, 1000);

是否可以在第一个函数执行后立即执行第二个函数,而不必使用超时事件?

感谢您的帮助!


我不理解问题;为什么你不能把 "//在第一件事之后做其他事情" 放在 if 代码块里面? - Ernest Friedman-Hill
需要更多的示例代码来回答这个问题。你在第一个 //DO THINGS 中是否正在进行 AJAX 调用?如果是,你可以简单地使用 callback - pixelbobby
如果(direction!==“leftnav”){ //做一些事情 //在第一件事之后做其他事情 } - Peter Porfy
4个回答

10

是的,这是可能的。这里有一个使用你提供的唯一代码的例子:

if (direction !== "leftnav") {  
    // DO THINGS...

    // THEN
    doOtherThings();

    // THEN
    doMoreThings();
}; 

var doOtherThings = function(){
    //DOING OTHER THINGS
}
var doMoreThings = function(){
    //DO EVEN MORE THINGS
}

7
如果if语句中的内容是阻塞的,Javascript就会按照从上到下的顺序执行。如果是这样的话,你可以把代码放在if语句的下面,在超时之外,它将正常运行。如果是异步的,你可以使用回调函数来启动第二个函数,当第一个函数完成时触发该回调函数。
下面提供的示例并不是做事情的一种真正有效的方式,但更多地用于说明我上面所说的内容。在write()函数内,你可能正在执行AJAX调用,或等待用户单击某些内容等等。解释器继续执行下一行代码,这一部分将立即写入,并按照阻塞顺序进行。
var write = function (v, cb) {
    setTimeout(function() {
        document.write(v);
        cb && cb();
    }, 1000);
}

if (true) {
    write("I'm not blocking, blah<br/>", function() {
        document.write("Running<br/>");
    });
}

if (true) {
    document.write("I'm blocking, blah<br/>");
}
document.write("Running<br/>");

输出

I'm blocking, blah
Running
I'm not blocking, blah
Running

http://jsfiddle.net/robert/vvmyk/


0
使用 JavaScript promise 和 Promise.all。

0

你只需要按照你想要的顺序调用函数

function foo(){
//code
}

function bar(){
//other
}

bar();
foo();

就像这样,bar会在foo之前被调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接