我讀過Why do I have to use await for a method to run asynchronously. What if I don't want to wait for the method to finish before continuing?和Are callbacks always asynchronous?,我仍然試圖瞭解何時回調實際上是異步的。爲什麼回調被認爲是異步的,如果我們需要等待
例如,doThat
在做任何事情之前都需要等待GET
數據。正如上面的第二個鏈接所述,javascript是單線程的。
doThis(doThat);
function doThis(callback) {
$.get('http://some_api/some_resource', function (data) {
callback(data);
});
};
function doThat(data) {
// Do something with data
};
只有我見過真正的異步功能與承諾,並承諾多在那裏我可以,例如,當動畫結束了加載其他數據。我希望能夠幫助我們更好地理解傳統回調是否實際上是異步的。具體的例子幫助。
「回調」實際上只是一個函數,您將其作爲參數傳遞給另一個函數,以便其他函數可以調用它,這個進程* *可以*都是同步的 - 它實際上取決於其他函數功能在做。但即使在像Ajax這樣的異步情況下,它不是異步的回調函數本身,它最終會調用它是異步的。在你的例子中,'doThat()'不會等待 - 它是等待調用'doThat()'的其他代碼(你的'doThat()'定義也是無效的)。 – nnnnnn
你可能想看看[所有的javascript回調是異步的嗎?如果不是,我怎麼知道哪些是?](http://stackoverflow.com/q/19083357/1048572)的一般問題和[什麼是異步JavaScript函數的簡單示例?](http:// stackoverflow.com/q/13806695/1048572)例如 – Bergi
也許這有幫助嗎? http://stackoverflow.com/questions/21607692/understanding-the-event-loop – ecarrizo