如何在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中为构造函数的所有实例添加属性或方法?
如何将 thunk 或回调函数传递给 redux 操作。在 redux store 中为模态和 toast 确认通知序列化函数