2017-06-28 63 views
0

假設我有以下代碼:如何使用參數作爲異步函數(Javascript)編寫同步函數?

同步版本:

var waitingToGetValue = heavyProcessingFunc (para1, para2); 
    response.send(waitingToGetValue); 

我試着環顧四周,但我得到的是功能,而參數。

異步嘗試:

heavyProcessingFunc(para1, para2, (function(waitingToGetValue){ 
     response.send(waitingToGetValue); 
    }); 

我需要兩個參數發送到函數。該函數返回一個值,我需要使用它將其發送到響應。

如果我把它放在一個異步格式中,它甚至不管嗎?任何人都可以向我推薦一個視頻/源代碼,它可以很容易地解釋同步與異步之間的區別:我過去幾天閱讀了許多內容,它只是在承諾,回調和嘗試訪問這些函數外的值時變得更加混亂。

+2

同步意味着一切停止,直到已接收到響應(一般是不好的,因爲用戶界面鎖定起來,而你等待變得反應遲鈍)。異步意味着代碼在請求正在進行時繼續處理。這樣做更好,因爲用戶界面不會被阻塞,但會引入不知道響應何時會回來的問題。這就是我們需要回調的原因。 –

+0

使函數接受回調不會使其異步。這取決於該功能的功能。例如。 'Array#forEach'也需要回調,但不是異步的。我不清楚你的問題是關於什麼的。 –

+0

「異步格式」對任何內容都沒有幫助。你需要讓這個函數實際上做一些異步的事情,並且如果它在各輪繁重的處理之間只有很小的延遲。 – Bergi

回答

0

function heavyProcessingFunc(para1, para2, callback){ 
 
    \t console.log('We have two params to work with', para1, para2); 
 
    \t setTimeout(function(){// Simulating a long request 
 
    \t \t callback("Now we send the response by calling the callback"); // This is waitingToGetValue 
 
    \t },3000); 
 
    } 
 
    
 
    heavyProcessingFunc("para1", "para2", function(waitingToGetValue){ 
 
     console.log(waitingToGetValue); 
 
     // response.send(waitingToGetValue); 
 
    });

+0

使用setTimeout(fn,0)通常創建asyc – Daniel