node.js中使用q.js实现api的promise化
关于啥是promise以及promise解决的是啥问题,敬请体验node的回调异步编码大法,顺带移步http://wiki.commonjs.org/wiki/Promises/A看看是咋定义的,在此不再赘述。
这里我们看看怎么用q.js实现nodeapi的promise。
一、万事开始皆为install
npminstallq
二、标准nodestyleapi的promise化方法
1、使用Q.nfcall
相对于Q.fcall,Q.nfcall就是node的Q.fcall。
varFS=require('fs'),
Q =require('q'),
colors=require('colors'),
file='example.txt';
varfsReadFile=Q.nfcall(FS.readFile,file,encoding);
fsReadFile.then(function(result){
console.log((“invokeinnfcall”+file).red);
console.log(result.green);
},function(error){
console.log(“invokeinnfcall”.red);
console.log(error.toString().red);
}
);
2、使用Q.denodeify
varfsReadFile_denodeify=Q.denodeify(FS.readFile);
fsReadFile_denodeify(file,encoding).then(function(result){
console.log("invokeindenodeify".red);
console.log(result.green)
},function(error){
console.log("invokeindenodeify".red);
console.log(error.toString().red);
}
);
3、使用Q.deferd
varfsReadFile_deferd=function(file,encoding){
vardeferred=Q.defer();
FS.readFile(file,encoding,function(error,result){
if(error){
deferred.reject(error.toString().red);
}
deferred.resolve(result);
});
returndeferred.promise;
};
fsReadFile_deferd(file).then(function(result){
console.log("invokeindeferd".red);
console.log(result.toString().green);
},function(error){
console.log("invokeindeferd".red);
console.log(error.toString().red);
}
);
4、使用makeNodeResolver()
varfsReadFile_makeNodeResolver=function(file,encoding){
vardeferred=Q.defer();
FS.readFile(file,encoding,deferred.makeNodeResolver());
returndeferred.promise;
};
fsReadFile_makeNodeResolver(file,encoding).then(function(result){
console.log("invokeinmakeNodeResolver".red);
console.log(result.green);
},function(error){
console.log(error.toString().red);
});