1

我是新手,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
}
4

1 回答 1

3

令人震惊的沉默的原因是几乎不可能以目前的形式回答您的问题。但无论如何我都会试一试。

大多数时候你不执行回调。您可能会将您的函数传递给 API,并在某些时候调用您的函数。因此,执行回调的是 API,而不是您。例如,这是使用 node.js 的 FileSystem 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 子系统在数据最终到达时知道如何处理数据,因为到那时,主线程已经开始了其他冒险。这仍然使生活变得更加复杂(有时是可怕的),但这样做是有原因的。

于 2013-11-01T08:08:50.953 回答