node.js 下 promise 开源包 q 使用
文章目录
promise 规范 可以让你从繁杂的 callback 中解脱出来.
如果我们在传统的 callback 中执行 5个 步骤,应该是下面这样的:
setp1(function(res)){
setp2(function(res)){
setp3(function(res){
setp4(function(res){
setp5(function(res){
//终于执行完了
});
});
});
});
});
如何摆脱上面的 callback 噩梦
async 如何来实现
async.series({
oneClass:function(done){
class.getStudent('1班',function(error,oneResult){
if(!error)
done(null,oneResult);
else
done(error,null);
});
},
twoClass:function(done){
class.getStudent('2班',function(error,twoResult){
if(!error)
done(null,twoResult);
else
done(error,null);
}
},
threeClass:function(done){
class.getStudent('3班',function(error,threeResult){
if(!error)
done(null,threeResult);
else
done(error,null);
}
}
},function(error,result){
if(!error)
callback(null,result);
else
callback(error,null);
});
promise 如何实现
今天我们要介绍的是实现了 promise 规范A 的 q 开源包.
github地址: https://github.com/kriskowal/q
npm 地址: https://www.npmjs.org/package/q
安装
npm install q --save
引用
var Q=require('q');
给方法定义一个 promise 规范
var getFile = function(file){
var defer = Q.defer();
fs.readFile(file, "utf8",function(err,data){
if(!err){
defer.resolve(data);//成功就返回数据
}else{
defer.reject(err);//失败就返回错误
}
});
return defer.promise;//必须返回promise
}
调用上面实现了 promise 规范的方法
getFile("../test.txt").then(function (data) {
//then方法两个匿名函数作为参数,第一个成功时执行,第二个失败时执行,
console.log(data);
}, function (error) {
console.error(error);
});
Q 并行执行几个方法
Q.all([//执行多个函数
setp1(),
setp2(),
setp3()
])
.spread(function (rtn1,rtn2,rtn3) {
//对应的多个返回值
console.log(rtn1,rtn2,rtn3);
return rtn1+rtn2+rtn3;
})
.done(function(result){
console.log(result);
});