如何在javascript中为函数添加回调

时间:2011-10-07 19:05:42

标签: javascript jquery function callback

我有两个javascript函数

function one () {
   do something long... like writing jpgfile on disk
}

function two () {
   do something fast... like show the file
}

我这样称呼它(在jQuery中)

 one ();
 two ();

因为函数二需要来自函数1的链接文件,所以我需要确保执行完成...所以在函数one的回调中获取函数2应该是技巧..但是如何做到这一点?< / p>

注意:我确实在这两个函数之间放了一个警告('aaa')让函数1完成,它运行正常......当警报被注释(删除)时,没有任何工作了!

4 个答案:

答案 0 :(得分:47)

如果你正在做异步事情,你只需要使用一个回调,否则无论事情花了多长时间,下一个函数在第一个函数完成之前都不会运行。

回调只是将函数作为参数传递,然后在完成后调用它。

function one (callback) {
   do something long... like writing jpgfile on disk
   callback();
}

function two () {
   do something fast... like show the file
}

one(two);

显然,如果你 做异步的事情,那么你需要一些东西来告诉你什么时候完成(比如事件发生)。

答案 1 :(得分:13)

简单:

function one (callback) {
   do something long... like writing jpgfile on disk

    if(callback) callback();
}

function two () {
   do something fast... like show the file
}

one(two);

答案 2 :(得分:4)

试试这个,

$.when($.ajax(fuction1())).then(function () {

fuction2;

});

这里fuction1是你的第一个调用函数,fuction2是你的第二个函数。

答案 3 :(得分:0)

我认为,如果浏览器在执行下一行命令之前等待“one()”内的进程,这很容易。冰山袭击泰坦尼克号因为它不等待。然后执行:

one(two) // while two is the callBack parameter

与以下内容完全不同:

one()
two()

我建议使用setInterval。

function one(){
    //--- Write the file to disk
    //.....................
}

function runTwo(){
    if (check_the_written_file_existence){
         clearInterval(t)
         two();
    }
}
var t = setInterval("runTwo()",500)

最重要的一点是,如果在“one()”函数中的“长进程”发生时触发事件,则只需将函数二绑定到该事件即可。除非,你必须在每个时间跨度检查结果,直到它真的完成。