我很好奇所有javascript回调是异步的,还是只有在某些情况下才是异步的.此外,我确定浏览器和NodeJ之间的javascript代码异步(或使用异步javascript的方式)有什么不同,所以我想知道在每种情况下,什么构成了真正的异步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函数是真正异步的(不考虑现在可用的promise ).是什么让jQuery的AJAX异步化的?它涉及XHR请求,并且在浏览器中,所有XHR请求都是异步的,这样简单吗?
对于nodejs环境,我有同样的问题. node 中的某些内容只有在涉及文件i/o、进程之类的内容时才能是异步的.nextTick、setTimeout或setInterval?为什么当我使用mongodb/mongoose进行数据库调用时,这是异步的?幕后发生了什么让事情变得如此?
异步"情况"是由环境预先确定的吗?或者,是否有某种方法可以使自己的功能真正异步,而不用利用环境中非常特定的功能(例如xhr、 node 中的文件io、process.nexttick等)?