我是 node.js
的新手,我不知道如何在 node.js
中执行以下操作
var data ="sampledata", name="testname", id=1;
myTask(data,name,id);
function myTask(data,name,id){
var job = jobDetails(id,data)
}
function jobDetails(id,data){
// some operations
return jobs
}
令人震惊的沉默的原因是,以目前的形式回答您的问题几乎是不可能的。但无论如何我都会试一试。
大多数时候您不执行回调。您可以将您的函数传递给 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 子系统知道在数据最终到达时如何处理数据,因为到那时,主线程已经开始其他冒险了.这仍然让生活变得更加复杂(有时非常可怕),但这是有充分理由的。