JavaScript 的突出特性之一(或有害,取决于您对该主题的看法)是它的异步特性。我了解代码流是如何工作的,但我并不是 100% 了解什么使异步代码“异步”。
当然,联系服务器或读取/写入数据库是一个异步操作。但是通常以非异步方式处理的东西呢?我可以编写使用回调的代码,使其全天异步。
同步示例
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% 理解异步性。似乎它不仅仅是查看一个函数并找出它是否使用回调。