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); });