我有两个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完成,它运行正常......当警报被注释(删除)时,没有任何工作了!
答案 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()”函数中的“长进程”发生时触发事件,则只需将函数二绑定到该事件即可。除非,你必须在每个时间跨度检查结果,直到它真的完成。