原创转载请注明出处:http://agilestyle.iteye.com/blog/2352487
为什么NodeJS约定回调函数的第一个参数必须是错误对象err(如果没有错误,该参数就是null)?
因为执行分成两段,在这两段之间抛出的错误程序无法捕捉,只能当做参数传入第二段。
维基百科上的解释:
In computer programming, a callback is a reference to a piece of executable code that is passed as an argument to other code.
jQuery文档的解释:
A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.
先看一个简单地例子:
function mainFunction(callback) { var someGirl = 'A girl who alreay has a boy friend'; callback(someGirl); } mainFunction(function(a) { console.log("Hello: "); console.log(a); }); mainFunction(function(b) { console.log("World: "); console.log(b); });
Run
Note:
鄙人对上述代码的诠释就是,比如你和你们同事一起去参加年会,舞台上看到一个颜好声甜身材曼妙的姑娘,于是乎,心中的欲望开始泛滥,想迫不及待去找个那个姑娘搭个讪认识一下,加个微信,留个联系方式什么的;但是呢,姑娘还在表演中,你又不立刻行动,只能先定个计划(等表演结束去搭讪她),这个计划就是callback,也就是简简单单的一个函数声明,具体的付诸实践呢,还能等表演结束之后,你去走套路进行搭讪,也就是函数的具体实现(每个人的搭讪方式不同,所以实现的方式也各有不同),最后非常可惜,你和你同事都搭讪失败,这个姑娘已经名花有主了。
再来看一个正常一点的例子,找点感觉
var add = function(a, b) { return a + b; }; var substract = function(a, b) { return a - b; }; var multiply = function(a, b) { return a * b; }; var divide = function(a, b) { return a / b; }; var getParams = function(a, b) { console.log(a + ":" + b); return "200"; }; var calc = function(num1, num2, callback) { return callback(num1, num2); }; console.log(calc(4, 2, add)); console.log(calc(4, 2, substract)); console.log(calc(4, 2, multiply)); console.log(calc(4, 2, divide)); console.log(calc(4, 2, getParams)); // anonymous function console.log(calc(4, 2, function(a, b) { return a * b + a / b; }));
Run
相关推荐
Edge 实现 NodeJS 与 .NET 互操作 Edge 是一种在进程内实现 NodeJS 与 .NET 互操作的桥接技术,可以在 NodeJS 里使用 .NET 代码和库,也可以在 .NET 程序里使用 NodeJS 的代码。Edge 运行需要 .NET Framework 4.5,...
在”初探nodeJS”随笔中,我们对于node有了一个大致地了解,并在最后也通过一个示例,了解了如何快速地开启一个简单的服务器。 今儿,再次看了该篇随笔,发现该随笔理论知识稍多,适合初级入门node,固萌生一个想法...
使用nodejs的http模块来完成post请求,函数为 http.request(options, callback)#
该java源代码将建行互联网银企被扫支付接口java版加密及验签Demo 封装成jar包,方便nodejs调用。 1.将建行Java版加密Demo打包成jar包:CCBParam.jar。并将jar包放到服务器的相应文件夹下。 2.根据订单号、金额、付款...
4. `each(sql, [params], [callback], [complete])`:执行SQL,逐条处理结果,通常用于批量处理数据,如迭代显示结果。 对于封装,我们可以创建一个模块,如`dbUtil.js`,包含一些常用的方法,例如: ```...
3. 发送数据到服务器,使用`socket.send(data, port, address[, callback])`方法,其中data是你要发送的数据,port和address是服务器的端口和IP地址。 4. 可以选择设置监听器来处理服务器的响应。 在提供的压缩包...
Nodejs 中的 gzip deflate 压缩详解 Nodejs 中的 gzip deflate 压缩是指在 HTTP 传输过程中对数据进行压缩,以减少数据的体积,提高传输效率。压缩算法有多种,如 gzip、deflate 等。本文将介绍 Nodejs 中关于 ...
在本文中,我们将深入探讨如何使用HAP-NodeJS创建HomeKit兼容的虚拟设备,并结合树莓派3的GPIO(General Purpose Input/Output)接口,通过Python脚本来控制硬件设备。首先,我们来理解一下HAP-NodeJS的核心概念。 ...
在"Nodejs最新API文档"中,我们可以找到关于Node.js 4.0版本的所有官方API接口及其用法。这个版本是Node.js发展中的一个重要里程碑,引入了许多改进和新特性,旨在提升性能和稳定性。以下是一些关键的知识点: 1. *...
- **setTimeout(callback, delay, [arg], ...)**:设置一个延时调用的函数,delay 之后执行 callback,并传入 arg 参数。 - **clearTimeout(timeoutId)**:取消由 setTimeout 设置的延时调用。 - **setInterval...
NodeJS的`url-extract`模块是一个用于网页截图和URL信息提取的工具,它通过集成PhantomJS提供了高效且方便的API。这个模块解决了在高并发环境下,每次截图操作启动新PhantomJS进程导致的效率问题,通过优化线程管理...
- setTimeout(callback,delay,[arg],[]):设定一个定时器,将callback函数延迟delay毫秒后执行。 - clearTimeout(timeoutId):取消之前通过setTimeout设置的定时器。 - setInterval(callback,delay,[arg],[]):...
NodeJS 中截取文件的方法是 truncate(filename, len, callback)。 MySQL 数据库操作 MySQL 数据库中,添加数据表中的数据可以使用 INSERT 语句,查询数据可以使用 SELECT 语句,修改数据可以使用 UPDATE 语句,...
- `app.listen(port[, hostname[, backlog[, callback]]])`:监听指定端口和主机地址。 #### 四、Node.js异步编程模式 - **回调函数**:最原始的异步编程方式。 - 示例:`fs.readFile('data.txt', 'utf8', ...
db.sql = function (sql, callBack) { var connection = new mssql.Connection(config, function (err) { if (err) { console.log(err); return; } var ps = new mssql.PreparedStatement(connection); ps....
function exportAllKeysToRedis(keys, callback) { keys.forEach(async (key) => { const value = await client.get(key); if (value) { // 假设这里有一个将Redis数据转为JSON的函数 const jsonData = ...
4. **异步编程改进**:在Node.js 4.6中,Promise的实现更为成熟,这对于处理异步操作提供了更好的方式,避免了回调地狱(Callback Hell)。开发者可以使用async/await语法糖来编写更加清晰的异步代码。 5. **性能...
function doSomething(callback) { setTimeout(() => { callback("Done"); }, 1000); } doSomething(function(result) { console.log(result); // 输出 "Done",1秒后 }); ``` **使用Promise:** ```...