JavaScript的突出特性之一(或者是不利的,取決於你對這個主題的看法)是異步性的。我理解代碼流的工作方式,但我並不是100%地表示異步代碼是「異步」的。什麼構成異步JavaScript?
當然,聯繫服務器或讀/寫數據庫是異步行爲。但是關於通常非異步處理的東西呢?我可以編寫使用回調的代碼,使它整天都是異步的。
同步實例
var arrayToIterate = [1,2,3,4,5,6,7,8,9, ... ]
//Say this array length is in the hundreds of millions.
var addArrayContents = function(array) {
var total = 0;
for (var i = 0, len = array.length; i <= len; i++) {
total = total + array[i];
}
return total;
};
var arrayTotal = addArrayContents(arrayToIterate);
異步例
var arrayToIterate = [1,2,3,4,5,6,7,8,9, ... ]
//Say this array length is in the hundreds of millions.
var addArrayContents = function(array, callback) {
var iterator = function(total, arIndex, cb) {
if (arIndex == array.length) {
return cb(total);
}
total = total + array[arIndex];
arIndex++;
iterator(total, arIndex, cb)
};
iterator(0, 0, callback);
};
addArrayContents(arrayToIterate, function(result){
console.log(result);
// Do stuff
});
正如你所知道的,這兩個函數做同樣的事情,一個人的異步的,一個不是。在確定最佳時間同步執行異步操作時,有沒有經驗法則?在上面的例子中,當將這些數字加在一起時,同步函數會受到阻礙,而異步版本在運行時不會掛起。
我只是有一種感覺,我不會100%地理解異步性。看起來它不僅僅是看一個函數並找出它是否使用回調函數。
async的第二個例子是什麼?它只是在完成時調用一個回調函數 – adeneo
僅僅傳遞函數並不是使運行時系統異步的東西,而是事件調度系統的存在以及使用它來宣佈的外部服務事件已經發生 – Pointy
事件調度系統?似乎與我想了解的有關 –