'function foo(callback)'和'foo(arg1,arg2,function(err,data))'之间有什么区别?
我是nodejs的初学者。 我已经从nodeschool.io下载了learnyounode
模块,并且正在尝试使用Make it modular
练习。 在练习结束时,他们提到了这一点:
另外请记住,检查错误并在callback函数中执行早期返回是惯用的:
function bar (callback) { foo(function (err, data) { if (err) return callback(err) // early return // ... no error, continue doing cool things with `data` // all went well, call callback with `null` for the error argument callback(null, data) }) }
每当我试图理解callback
函数,他们的forms是:
foo(arg1, arg2, function(err,data){ if(err) //Handle it //Do something with data });
我很难理解两者之间的区别。 我google-d的,但说实话,有一些网页解释第一个callback风格,而有一些网页解释第二个。 我知道在第二种风格中, function(err, data)
是asynchronous调用的。 我对“asynchronous”的理解是用arg1和arg2调用foo
。 当“foo”完成function(err,data)
被调用。
但是我没有得到function bar (callback)
符号。 他们两个都在做callback,他们之间有什么区别? 我应该使用哪种符号来解决我的问题? 你如何决定使用哪一个?
在foo(arg1, arg2, function(err,data){
你正在调用foo
并把它作为一个parameter passing给一个callback函数,在function foo(callback)
你定义了 foo并且说它的参数是一个函数,将被称为“callback”。
在非asynchronous设置中,你会写类似的东西
//define foo function foo(arg1, arg2){ var someData = //... return someData; } //use foo var data = foo(1, 2); console.log(data);
在asynchronous设置中,函数调用callback而不是返回值
//define foo function fooAsync(arg1, arg2, callback){ var someData = //... callback(someData); }
而不是将返回值分配给一个variables,我们传递一个callback,其中该variables是一个参数:
//use foo fooAsync(1, 2, function(data){ console.log(data); });
我们也可以传递命名的函数作为callback。 传递匿名函数只是常见的情况:
function processData(data){ console.log(data); } fooAsync(1, 2, processData);