2014-11-22 128 views
0

我有調用另一個函數2的javascript函數1我的要求是函數1不應該等待函數2的執行。從javascript函數返回而不等待被調用函數

我的函數2調用ajax,使進程延遲導致用戶等待,直到我的函數2返回。 只要function1調用function2,我是否可以從function1返回?

+0

使用setTimeout來調用函數2,函數將返回。 – Aravind 2014-11-22 10:28:08

+2

實際上,如果使用它的異步版本,調用ajax不會使進程延遲。 – 2014-11-22 10:30:43

+0

你能提供你的代碼嗎? – 2014-11-22 10:34:37

回答

1

你可以做這樣的事情:

function f() 
{ 
f1(); 
console.log("I'm impatient, can't wait for f1"); 
} 
function f1() 
{ 
setTimeout(function(){f2();},0); 
} 
function f2() 
{ 
// your function which takes a long time to run 
for(var i =0;i<10000000;i++); 
console.log("I'm f2 and I'm finally done!"); 
} 
f(); 

這是如何工作的?

當您調用f1()時,它具有setTimeout函數。 setTimeout看到函數並將其放在事件隊列中,並且語句完成。程序控制返回到f(),並且「我不耐煩,等不及f1」被打印,然後當f2完全執行時,「我是f2,我終於完成了!」被打印。

+0

請解釋downvote。 – Aravind 2014-11-22 11:55:43

+0

小問題,但它完全等價於說'setTimeout(f2,0)'。 – 2014-11-22 12:13:30

+0

@torazaburo:是的,沒錯。這是實現OP所需的一種合法方式,我希望人們評論並解釋downvote :) – Aravind 2014-11-22 13:46:14