node.js函数回调

时间:2013-11-01 05:54:47

标签: javascript node.js

我是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
}

1 个答案:

答案 0 :(得分: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子系统知道在数据最终到达时如何处理数据,因为到那时,主线程已经在其他冒险中消失了。这仍然使生活变得更加复杂(有时甚至可怕),但这样做是为了一个好的理由。