的原因震惊的沉默执行下面的操作是,这几乎是不可能的回答你的问题在其目前的形式。但无论如何,我会给它一个镜头。
大多数情况下,您不会执行回调。你可能会将你的函数传递给API,并且在某个时候它会调用你的函数。这就是执行回调的API,而不是你。作为一个例子,这里有一个方法使用的node.js的文件系统API:
fs.readFile('/etc/passwd', {encoding:'utf-8'}, function (err, data) {
if (err) {
console.error(err);
} else {
console.log(data);
}
});
第三个参数是一个函数,通常被称为回调。函数fs.readFile()
设置I/O并立即返回。在将来的某个点上,I/O完成并回调您传入的函数(因此术语回调),提供错误代码和可能的数据,此时您的函数可以完成它想要的功能。
如果你想执行回调你自己,你写一个函数,函数和函数回电话,如:
function pass_double_x_to(x, cb) {
var two_x = 2 * x;
cb(two_x);
}
pass_double_x_to(21, function(tmol) {
console.log("zOMG, " + tmol + "!");
});
现在是你的函数,pass_double_x_to
,即执行回调function(tmol) { … }
。这实际上是一个非常愚蠢的使用回调,因为你的函数可以返回double-x。使用回调让生活变得更加复杂,没有理由。
fs.readFile()
和许多其他node.js API使用回调的原因是,它几乎所有阻塞操作都是异步执行的,因此它不会阻塞主线程,这会让您的整个服务器在操作系统关闭时暂停并获取文件。所以,与其等待文件被读取并返回内容,它会开始一个异步I/O操作,并立即返回,以便您的程序可以关闭并执行其他操作(如服务其他连接客户端),而I/O在后台进行中。您将回调传递给fs.readFile()
,以便底层I/O子系统在数据最终到达时知道如何处理数据,因为届时主线程会在其他冒险中消失。这仍然会让生活变得更加复杂(有时非常可怕),但是这对于一个好的原因是这样的。
你是什么意思? Node.js *是* JavaScript。 – Amadan
我想使用node.js执行上述操作 – Sush
node.js * is * JavaScript。唯一真正的区别是主机接口(例如无头和不同的事件源)。 – user2864740