`

NodeJS Callback

 
阅读更多

原创转载请注明出处: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 


 

 

 

  • 大小: 11.4 KB
  • 大小: 8.7 KB
分享到:
评论

相关推荐

    nodejs post 方法发送请求

    使用nodejs的http模块来完成post请求,函数为 http.request(options, callback)#

    nodejs调用建行互联网银企被扫支付接口加密及验签Demo+java封装jar包

    该java源代码将建行互联网银企被扫支付接口java版加密及验签Demo 封装成jar包,方便nodejs调用。 1.将建行Java版加密Demo打包成jar包:CCBParam.jar。并将jar包放到服务器的相应文件夹下。 2.根据订单号、金额、付款...

    c2p:把普通callback回调转化为Promise

    转化回调函数成简介把转化callback回调方式为Promise方式预转化nodejs内置的, , , 及 部分方法抄, 没有什么新意, 只是喜欢自己的写法而已除了mz之外, 另提供转换函数直接使用使用方法转换方法var callback2Promise =...

    nodejs中文学习手册

    2 JavaScript 與 NodeJS 11 2.1 Event Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2 Scope 與 Closure . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3 Callback . . . ...

    nodejs手册中文版.pdf

    nodejs手册中文版.pdf  Synopsis 概要  Global Objects 全局对象 o global o process o require() o require.resolve() o require.paths o __filename o __dirname o module  Timers 定时器 o setTimeout...

    nodejs async异步常用函数总结(推荐)

    nodejs框架类库很多,“流程控制”本来是件比较简单的事,但是对于nodejs的异步架构的实现方法,对于需要同步的业务逻辑,实现起来比较麻烦。 async的集合控制: async.map(arr, function(item, callback){},...

    alidns-nodejs:NodeJS 阿里云DNS解析API调用方式

    alidns-nodejsAPI调用install 安装npm i alidns-nodejs --saveuse 使用请查看 demo.jsimport ALIDNS from "alidns-nodejs";var client = ALIDNS({ accesskeyId: 'your accesskeyId', accesskeySecret: 'your ...

    mongoDB-acl-nodejs:一个非常简单的Acl模块,用于在应用程序内存和MongoDB中使用的NodeJS

    mongoDB-acl-nodejs 一个非常简单的Acl模块,用于在应用程序内存和MongoDB中使用的NodeJS 我创建此模块是因为我需要使用MongoDB的非常简单的Acl模块功能说明Acl.init(选项,回调) -options :对象用于连接到您的...

    nodejs实现post和批量post发送请求的功能

    使用nodejs的http模块来完成post请求,函数为 http.request(options, callback)#

    Nodejs异步回调的优雅处理方法

    Nodejs最大的亮点就在于事件驱动, 非阻塞I/O 模型,这使得Nodejs具有很强的并发处理能力,非常适合编写网络应用。在Nodejs中大部分的I/O操作几乎都是异步的,也就是我们处理I/O的操作结果基本上都需要在回调函数中...

    nodejs中sleep功能实现暂停几秒的方法

    我在网上了解了一下nodejs中sleep功能,搜索了很多关于nodejs中sleep功能介绍,下面我来记录一下,有需要了解的朋友可参考。希望此文章对各位有所帮助。 一 背景 在使用nodejs爬虫的时候,经常会遇到别人的网站对频率...

    nodejs判断文件、文件夹是否存在及删除的方法

    本文实例讲述了nodejs判断文件、文件夹是否存在及删除的方法。分享给大家供大家参考,具体如下: 判断文件、文件夹是否存在 需要使用nodejs的fs模块 引入 var fs= require("fs") 判断的方法 fs.exists(path, ...

    nodejs fs 命令相关文件操作

    nodejs fs 命令相关文件操作。 nodejs 操作文件以及文件夹。 /** * @description: 同步读取 * @param {string} 文件地址 */ readFileSync(src) ...readFile(src, callback = json => json) ………

    NodeJS实现同步的方法

    NodeJS被打上了单线程、非阻塞、事件驱动…..等标签。 在单线程的情况下,是无法开启子线程的。经过了很久的研究,发现并没有thread函数!!!但是有时候,我们确实需要“多线程”处理事务。nodeJS有两个很基础的api...

    nodejs个人博客开发第四步 数据模型

    本文为大家分享了nodejs个人博客开发的数据模型,具体内容如下 数据库模型 /model/db.js 数据库操作类,完成链接数据库和数据库的增删查改 查询表 /*查询*/ select:function(tableName,callback,where,field){ ...

    进阶之初探nodeJS

    在”初探nodeJS”随笔中,我们对于node有了一个大致地了解,并在最后也通过一个示例,了解了如何快速地开启一个简单的服务器。 今儿,再次看了该篇随笔,发现该随笔理论知识稍多,适合初级入门node,固萌生一个想法...

    Node.js-腾讯云短信服务NodeSDK

    目前腾讯云短信为客户提供国内短信、国内语音和海外短信三大服务,腾讯云短信SDK支持以下操作

    详解nodejs 文本操作模块-fs模块(一)

    JS的安全性问题,就决定了JS想要取操作数据库操作文件是不可实现的,而Nodejs作为服务端的JS,如果依然不能操作文件,那么又如何称之为服务端语言呢,所以在Nodejs中,提供了一个fs(File System)模块,以实现文件...

    前端开源库-callback2promise

    前端开源库-callback2promisecallback2promise,将nodejs样式的回调函数转换为promise

    nodejs集成sqlite使用示例

    sqlite3是一个专为nodejs设计的,在nodejs上面生态更健壮,因此最终选择sqlite3。 sqlite3几乎支持所有版本的nodejs,同时也可以和nwjs集成。 安装 基于npm安装 npm install sqlite3 这样除了安装完sqlite3的npm...

Global site tag (gtag.js) - Google Analytics