2017-06-21 111 views
0

我試圖做一些異步計算並從回調計算中得到結果。複雜計算的異步回調Javascript

function customWithCallBack(callback) { 
 
\t //Complex logic calculation that takes time. 
 
    \t callback(); 
 
} 
 

 
function actualCallBack() { 
 
\t console.log("This is callback called after certain event"); 
 
} 
 

 

 
console.log("First"); 
 
customWithCallBack(actualCallBack); 
 
console.log("Second");

//Required Output 
First 
Second 
This is callback called after certain event. 


//Actual Output 
First 
This is callback called after certain event 
Second 

我怎樣才能達到所需的輸出? 這是第一個「首先打印」。然後,「第二」。 最後在複雜的邏輯回調完成後調用print 「這是在某個事件後調用的回調函數」。 除了網絡請求和I/O操作之外,是否可以執行復雜計算?

+0

這是一個相當類似的問題,這個鏈接:https://stackoverflow.com/questions/9516900/how-can-i-create-an-asynchronous-function-in-javascript – Geono

回答

0

function customWithCallBack(callback) { 
 
\t //Complex logic calculation that takes time. 
 
    setTimeout(function(){ callback(); }, 100); 
 
    \t 
 
} 
 

 
function actualCallBack() { 
 
\t console.log("This is callback called after certain event"); 
 
} 
 

 

 
console.log("First"); 
 
customWithCallBack(actualCallBack); 
 
console.log("Second");

+0

回調()後100毫秒...我想要的是執行復雜的邏輯計算後的回調......我們如何實現這一目標? – xerox007

+0

調用回調完成您的計算後 –

0

所以,你要結束當前調用堆棧,然後開始回調了新的調用堆棧。這可以通過將回調推送到queue來實現,該queue包含所有觸發的事件處理程序和計時器,並且它會一個接一個地啓動新的callstack。所以你可以這樣做:

setTimeout(callback,0,"param1","param2"); 

所以回調在當前調用堆棧結束後執行。