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

Posted

技术标签:

【中文标题】如何在javascript中为函数添加回调【英文标题】:How to add a callback to a function in javascript 【发布时间】:2011-12-03 06:06:34 【问题描述】:

我有两个 javascript 函数

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


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

我这样称呼它(在 jQuery 中)

 one ();
 two ();

因为函数二需要函数一的链接文件,我需要确保执行完成......所以在函数一的回调中获取函数二应该是诀窍..但是怎么做呢?

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

【问题讨论】:

【参考方案1】:

如果你在做异步操作,你只需要使用回调,否则不管需要多长时间,下一个函数在第一个函数完成之前不会运行。

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

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


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


one(two);

显然,如果您正在执行异步操作,那么您需要一些能够告诉您何时完成的操作(例如事件触发)。

【讨论】:

【参考方案2】:

简单:

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);

【讨论】:

不确定我是否理解....将功能一放入功能二有意义...但我不理解 IF @menardmam,如果没有回调传递到函数中,IF 就在那里。 @menardmam.... if 语句用于验证参数在调用之前是否实际分配了一个函数。基本上你可以调用function one 有或没有回调参数。示例:one();one(two); 我觉得这和两个函数一个一个调用没什么区别。如果它是异步的(比如 jquery .load),你需要一个更好的方法。 注意:one(two) 而不是one(two())。只是说:)【参考方案3】:

试试这个,

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

fuction2;

);

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

【讨论】:

【参考方案4】:

我认为如果浏览器在执行下一行命令之前等待“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()”中的“长进程”完成后触发了事件,则只需将函数二绑定到该事件。除非,你必须每隔一段时间检查一次结果,直到它真正完成。

【讨论】:

以上是关于如何在javascript中为函数添加回调的主要内容,如果未能解决你的问题,请参考以下文章

在 Express JS 和 NodeJS 中为 jsonp 回调函数添加参数

javascript 如何在JavaScript中为构造函数的所有实例添加属性或方法?

如何在回调函数中为 chrome 扩展图标设置动画?

如何将 thunk 或回调函数传递给 redux 操作。在 redux store 中为模态和 toast 确认通知序列化函数

添加回调函数时 JavaScript 停止工作

如何在javascript中为innerhtml添加CSS