什么是节点中的cb()?

人们从哪里获得cb(),这是一个Node的东西或香草JS的东西?

例如:

使用Promise,Generators和其他方法pipe理Node.jscallback函数

他们正在使用cb()我猜callback,并返回一个错误或一个值或两者在某些情况下取决于callback函数sig是什么?

cb在上下文中描述它是如何将香草callback函数传递到一个(通常)asynchronous函数中的,这是node.js中的一个常见模式(有时会标记为next,但如果您愿意,可以将其称为bananas – 这只是一个参数)。

通常情况下,第一个参数是一个error对象(通常是假的 – 如果全部按计划进行),而后面的参数是某种forms的数据。

例如:

 function myAsyncFunction(arg1, arg2, cb) { // async things cb(false, { data: 123 }); } 

那么使用这个函数:

 myAsyncFunction(10, 99, function onComplete(error, data) { if (!error) { // hooray, everything went as planned } else { // disaster - retry / respond with an error etc } }); 

Promise是这种devise模式的替代scheme,您将从myAsyncFunction返回一个Promise对象

例如:

 function myAsyncFunction2(arg1, arg2) { return new Promise(function resolution(resolve, reject, { // async things resolve({ data: 123 }); }); } 

那么使用这个函数:

 myAsyncFunction2(10, 99) .then(function onSuccess(data) { // success - send a 200 code etc }) .catch(function onError(error) { // oh noes - 500 }); 

他们基本上是一样的,只是写法略有不同。 承诺不是以原生格式广泛支持的 ,但是如果在构build步骤中通过一个转译器(我推荐babel ),他们应该在浏览器中足够可靠地执行。

callback将永远在一个浏览器中没有填充/ transpilation。

node.js有很多以完成callback为参数的asynchronous操作。 这在各种node.js API中非常常见。

此callback的node.js约定是传递给callback函数的第一个参数是一个错误代码。 这个第一个参数的错误值意味着没有错误。

例如:

 fs.readFile("test.txt", function(err, data) { if (!err) { console.log("file data is: " + data); } }); 

您自己创build的函数也可以定义自己的callback,以便传达一个或多个asynchronous操作的结束。

 function getData(id, cb) { var fname = "datafile-" + id + ".txt"; fs.readFile(fname, function(err, data) { if (err) { cb(err); } else if (data.slice(0, 6) !== "Header"){ // proper header not found at beginning of file data cb(new Error("Invalid header")); } else { cb(0, data); } }); } // usage: getData(29, function(err, data) { if (!err) { console.log(data); } }); 

从Vanilla JS中,你可以声明一个函数并传递另一个函数的声明,这个函数可以被称为asynchronous

https://developer.mozilla.org/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Declaring_and_Using_Callbacks