2017-07-13 62 views
0

由於我對JavaScript的使用經驗不太熟悉,所以我對函數順序感到困惑。Javascript處理函數同時?

在以下示例中,我期望的console.log()後等待要被處理()結束。

function wait() { 
    setTimeout(function() { 
     console.log("wait " + new Date().getTime()); 
    }, 3000); 
} 

wait(); 

console.log("global " + new Date().getTime()); 

控制檯顯示這些值:

全球1499993535591等待1499993538592

爲什麼被處理的第二個函數的第一個甚至沒有完成之前?

當我在函數內部填充一個數組,並且需要在該函數之外使用它時,這會導致一些問題,因爲它仍然是空的。

+2

的setTimeout是工作無阻塞 – Hamms

+3

異步代碼可能會非常棘手https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-異步調用 –

+3

JavaScript是單線程的。什麼都不會同時發生。異步函數必須等待主線程完成纔能有資格運行。即使你的'setTimeout'上的延遲爲'0',執行順序仍然是相同的。 – 4castle

回答

0

setTimeout是異步的,它不會在執行下一行之前等待,而是在您設置的延遲完成時執行代碼。

0

的setTimeout是非阻塞的 - 不管你做什麼,不只是「使用異步:假」,除非你想用戶體驗涉及到只是「凍結了」,而他們等待。相反,學會如何與async patterns(鏈接信用SLaks