2013-11-01 84 views
1

我是新来node.js我不知道如何在node.jsnode.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

你是什么意思? Node.js *是* JavaScript。 – Amadan

+0

我想使用node.js执行上述操作 – Sush

+0

node.js * is * JavaScript。唯一真正的区别是主机接口(例如无头和不同的事件源)。 – user2864740

回答

3

的原因震惊的沉默执行下面的操作是,这几乎是不可能的回答你的问题在其目前的形式。但无论如何,我会给它一个镜头。

大多数情况下,您不会执行回调。你可能会将你的函数传递给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子系统在数据最终到达时知道如何处理数据,因为届时主线程会在其他冒险中消失。这仍然会让生活变得更加复杂(有时非常可怕),但是这对于一个好的原因是这样的。

+0

非常感谢你的简要解释 – Sush

+2

@Sush:这不是*简短。 :-)。不过,无论如何你都很受欢迎。 –

+0

可以请你这个问题http://stackoverflow.com/questions/19701807/create-httpserver-using-node-js – Sush