【发布时间】:2013-10-05 16:12:09
【问题描述】:
我很好奇是否所有 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、node 中的文件 io、process.nexttick 等)?
【问题讨论】:
标签: javascript node.js asynchronous synchronous