nodejs--promise之Q模块

Q实现promise的常用方法有7个,在不同情况下使用不同的方法,下面就一一来介绍:


------------低-----调-----的-----分-----割-----线-------------------------------

var Q = require('q');
var fs = require('fs');
var colors = require('colors');
//将数据封装成promise
//特点:封装一个数据,调用then直接得到该数据
Q('hello,world').then(function (data) {
    console.log(data);  //-->hello,world
});


//Q.fcall
//将同步方法封装成promise
//特点:传递一个function,返回一个promise,调用then得到方法的返回值

Q.fcall(function(){

    return 123;

}).then(function(data){
    console.log(data);  //--> 123
});

//定义两个参数供下面方法用
var filename = '../public/test.xml';
var encoding = 'utf-8';

//Q.nfcall:
//将异步方法封装成promise
//特点:封闭时就得传递调用方法的参数,直接得到promise


Q.nfcall(fs.readFile,filename,encoding).then(function (data) {
    console.log(data);  //-->xml内容就不明说了,就这样的格式就对了
});


//Q.denodeify:
//将异步方法封装成promise
//特点:封装后返回一个方法,调用此方法得到promise

var File_denodeify = Q.denodeify(fs.readFile);

File_denodeify(filename,encoding).then(function(result){

        console.log(result.green)
    },function(err){

        console.log(err.toString().red);
    }
);

//Q.defer:使用最多
//手动封装一个promise
//特点:使用deferd对象的reject方法(失败回调)、resolve方法(成功回调)、promise属性来实现自定义promise//(前面2nfcaldenodeify底层应该也是用deferd实现的)

var File_deferd = function(filename,encoding){
    var deferred = Q.defer();
    fs.readFile(filename,encoding,function(err,result){
        if(err){
            deferred.reject(err.toString().red);
        }
        deferred.resolve(result);
    });

    return deferred.promise;
};
//标准的then(onFulfilled,onRejected);
//File_deferd(filename).then(function(result){

//        console.log(result.toString().blue);
//    },function(err){
//        console.log(err.toString().red);
//    }
//);

//catch()捕获错误
File_deferd(filename).then(function(result){

        console.log(result.toString().blue);
    }).catch(function (err) {
    console.error(err);
});


//Q.makeNodeResolver:
//手动封装一个promise
//特点:和第deferd原理差不多,只不过用了deferd自带的方法省掉了我们手动实现reject方法、resolve方法
var File_makeNodeResolver = function(filename,encoding){
    var deferred = Q.defer();
    fs.readFile(filename,encoding,deferred.makeNodeResolver());
    return deferred.promise;
};

File_makeNodeResolver(filename,encoding).then(function(result){

    console.log(result.green);
},function(err){
    console.log(err.toString().red);
});


//Q.all
//将一批promise封装成一个promise
//特点:可以并行执行一批promise,全部执行完毕后一起返回,得到的结果是一个数组
Q.all([promise1,promise2,promise3]).then();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值