Promise解决node.js回调问题

Promise就是为了解决回调的! 在npm包中有个叫Q的家伙就是专门封装promise解决回调问题的。

有关promise介绍以及Q的介绍点这里

下面介绍如何利用Q把只提供回调函数方式的api封装成promise模式:(以官方fs为例)

Q中有两种方式封装函数成promise对象,分别是Q defer 和 Q promise:

/**
 * try to use q to handle async
 * @cjp   2014-07-15
 */

var Q = require(‘q‘);
var fs = require(‘fs‘);

/**
 * Q defer!
 */

function fs_readFile (file) {
    var deferred = Q.defer();
    fs.readFile(file, function (err, data) {
	if (err) {
	    deferred.reject(err);
	} else {
	    deferred.resolve(data);
	}
    });
    return deferred.promise;
};

/**
 * Q promise
 */

function fs_readFile (file) {
    return Q.promise(function(resolve, reject, notify) {
	fs.readFile(file, function(err, data) {
	    if (err) {reject(err)}
            else {resolve(data);}
	});
    });
}

两种方式均生成了,promise对象的readFile函数,这是就可以使用promise的经典方式调用函数和获取函数返回值了!

fs_readFile(‘mytext.txt‘).then(console.log).fail(console.error);

把api封装成promise对象,对函数的如何使用就看对promise的了解程度了...

Promise解决node.js回调问题

时间: 2024-10-23 10:50:23

Promise解决node.js回调问题的相关文章

Node.js 回调函数 1) 阻塞 ,同步 2) 非阻塞 ,异步.

1.阻塞. 同步. 1) 读取的文件: input.txt 菜鸟教程官网地址:www.runoob.com 2) main.js 1 var fs = require("fs"); 2 3 //同步读取, 阻塞代码,按顺序执行的 4 var data = fs.readFileSync('input.txt'); 5 6 console.log(data); 7 console.log(data.toString()); 8 console.log("程序执行结束!"

【Node.js学习四】 Node.js回调函数

Node.js 回调函数 Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数. 例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回.这样在执行代码时就没有阻塞或等待文件 I/O 操作.这就大大提高了 Node.js 的性能,可以处理大量的并发请求. 下面对阻塞代码和非阻塞代码分别举出一例

5、Node.js 回调函数

内容:回调函数:阻塞/同步.非阻塞.和异步区别:阻塞和非阻塞代码实例 Node.js 回调函数Node.js 异步编程的直接体现就是回调.异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了.回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数.例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回.这样在执行代码时就没有阻塞或等待文件 I/O 操作.这就大大提高了 Node.js 的性能,可

解决node.js使用fs读取文件出错

解决node.js使用fs读取文件出错:https://www.cnblogs.com/xinsir/p/10315485.html 今天配接口,使用fs模块读取json出现了错误'no such file or directory',然后经查终于解决,特此记录. 使用nodejs的fs模块读取文件时习惯用相对路径,但是运行的时候出现了上述的错误,原因就是fs模块读取文件的相对路径是以启动server.js的位置为基准的,而不是以server.js文件的位置. 这就是这篇文章所要讲述的问题.并且

Async.js解决Node.js操作MySQL的回调大坑

因为JavaScript语言异步特性.在使用Node.js运行非常多操作时都会使用到回调函数,当中就包含訪问数据库.假设代码中的业务逻辑略微复杂一点,回调一层层嵌套.那么代码非常easy进入Callback Hell,不管对写代码的人还是阅读代码的人,都是精神上的折磨. 比如对MySQL的一个事务操作,插入一条posts并插入一条log: var title = 'It is a new post'; connection.beginTransaction(function(err) { if

【360开源】thinkjs:基于Promise的Node.js MVC框架 (转)

thinkjs是360奇舞团开源的一款Node.js MVC框架,该框架底层基于Promise来实现,很好的解决了Node.js里异步回调的问题.360奇舞团(奇虎75Team),是奇虎360公司Web平台部前端工程师与部分特约嘉宾组成的一个前端团队. thinkjs主要特性有: 支持Http.命令行.WebSocket.Restful等多种访问方式: 项目实行“C(Core)+B(Behavior)+D(Driver)”架构: Model高度封装,无需手写SQL语句: 封装了数据库(DB).会

利用async和await异步操作解决node.js里面fs模块异步读写,同步结果的问题

async await 解决异步问题,这两个关键字是es7提出的,所以测试,node和浏览器版本提高一些 async await 操作基于promise实现的 async await这两个关键字是一起使用,分开使用会报错 await 后面只能跟promise对象 不熟悉的promise异步操作的朋友,去看看我promise那边文章 Promise 解决多层嵌套,回调地狱什么叫回调地狱写一个实例,就是恶心的多层欠嵌套 function a(){ function b(){ function c()

解决Node.js调用fs.renameSync报错的问题(Error: EXDEV, cross-device link not permitted)

2014-08-23 今天开始学习Node.js,在写一个文件上传的功能时候,调用fs.renameSync方法错误 出错代码所在如下: 1 function upload(response,request){ 2 console.log("upload called"); 3 var form = new formidable.IncomingForm(); 4 console.log("about to parse"); 5 form.parse(request

Node.js 回调函数

callback: A callback is a function that is passed as an argument to another function and is executed after its parent function has completed. Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数.