JavaScript の際立った機能の 1 つ (または、この件に関する見解によっては不利な点) は、その非同期性です。コード フローがどのように機能するかは理解していますが、非同期コードを「非同期」にする理由については 100% ではありません。
確かに、サーバーへの接続やデータベースへの読み取り/書き込みは非同期アクションです。しかし、通常は非同期で処理されるものはどうでしょうか? コールバックを使用して 1 日中非同期にするコードを書くことができます。
同期の例
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% 理解していないと感じています。関数を調べてコールバックを使用しているかどうかを調べるだけではないようです。