すべての JavaScript コールバックが非同期なのか、それとも特定の状況でのみ非同期なのかについて興味があります。また、javascriptコードを非同期にするもの(または非同期javascriptを使用する方法)がブラウザとnodejsで異なると確信しているので、それぞれの状況で実際の非同期javascriptを構成するものを知りたい.
次のシナリオでは、実際には非同期コードを書いていないという印象を受けています。
function addOne(value){
value = value + 1;
return value;
}
function simpleMap(values, callback){
for(i = 0; i < values.length; i++){
val = values[i];
val = callback(val);
values[i] = val;
}
return values;
}
newValues = simpleMap([1,2,3], addOne);
ただし、たとえば、jQuery の AJAX 関数が真に非同期であることはわかっています (現在利用可能なプロミスは考慮していません)。jQuery の AJAX を非同期にするのは何ですか? XHR リクエストが関係するのと同じくらい単純で、ブラウザではすべての XHR リクエストが非同期ですか?
nodejs環境についても同じ質問があります。ファイル i/o、process.nextTick、setTimeout、または setInterval のようなものが含まれる場合にのみ、ノード内の何かを非同期にすることができますか? mongodb/mongoose を使用してデータベース呼び出しのようなことを行うと、それが非同期になるのはなぜですか? それを可能にしている舞台裏で何が起こっているのでしょうか?
非同期の「状況」は環境によって事前に決定されていますか? または、環境の非常に特定の機能 (xhr、ノード内のファイル io、process.nexttick など) を利用せずに、独自の機能を真に非同期にする方法はありますか?