q.jsはnodejsの順番呼び出しを実現します.

4704 ワード

nodejsの非同期呼び出しは時々一番頭が痛くなります.どのようにコード順の実行ができますか?ここでnodejsのpromiseを共有します.
何がpromiseですか?promiseの規格は、非同期呼び出しの戻り結果、正しい戻り結果およびエラー処理を含む.詳細な説明文書は、Promises/A+を参照することができる.現在promise標準を実現しているモジュールはたくさんあります.例えば、Q、bluebird、Deferredなどです.ここではQを例にして、promisenodejsにおける使用方法を紹介します.
プロミスの使用について調べましたが、一番いいのはq.jsです.個人的にはそう思います.もちろんpromise.jsもあります.興味のある友達は研究してみてください.ここでは主にq.jsの使い方を説明します.
まずインストールq.jsをダウンロードします.
npm install q
1、Q.nfcalを使う
Q.fcalに対して、Q.nfcalはnodeのQ.fcalです.
var FS = require('fs'),
    Q   = require('q'),
    colors = require('colors'),
    file = 'example.txt';
var fsReadFile = Q.nfcall(FS.readFile,file,encoding);
fs ReadFile.then(function){  consolie.log(「invoke in nfcal」+file).red)  consolone.log(reult.green)  },function{error}  consolie.log(「invoke in nfcal」.red)  consolie.log(error.toString().red);  }  );
 
Q.fcal(function){return'1"""").then(function(value 2){consosolue.log(「プリント」,value 2);returnrn User.test(value 2)).then(function(value 3){sone.lone.lone.lone.lone.logt){valution.lone.lone.lone.lone.lone.lone.lover.lover.logn(value 3){vatuturne 3)){vatututurne 3){vatututurne 3){vaturne 3)){vatututurne.lone.lone.lone.lone.lofunction(//Do something with value 4 consolue.log).catch(function){/Handle any error from all above steps).done();
2使用Q.denodeify
var fsReadFile_denodeify = Q.denodeify(FS.readFile);
 
fsReadFile_denodeify(file,encoding).then(function(result){
  console.log("invoke in denodeify".red);
  console.log(result.green)
},function(error){
  console.log("invoke in denodeify".red);
  console.log(error.toString().red);
}
);
3、Q.deferdを使う
var fsReadFile_deferd = function(file,encoding){
  var deferred = Q.defer();
  FS.readFile(file,encoding,function(error,result){
  if(error){
    deferred.reject(error.toString().red);
  }
  deferred.resolve(result);
});
 
return deferred.promise;
};
 
fsReadFile_deferd(file).then(function(result){
  console.log("invoke in deferd".red);
  console.log(result.toString().green);
},function(error){
  console.log("invoke in deferd".red);
  console.log(error.toString().red);
}
);
4、make NodeResoloverを使用する()
var fsReadFile_makeNodeResolver = function(file,encoding){
  var deferred = Q.defer();
  FS.readFile(file,encoding,deferred.makeNodeResolver());
  return deferred.promise;
};
 
fsReadFile_makeNodeResolver(file,encoding).then(function(result){
  console.log("invoke in makeNodeResolver".red);
  console.log(result.green);
},function(error){
  console.log(error.toString().red);
});