萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> node.js中使用q.js實現api的promise化

node.js中使用q.js實現api的promise化

   這裡我們看看怎麼用q.js 實現node api的promise。

  一、萬事開始皆為install

  代碼如下:

  npm install q

  二、標准node style api 的promise化方法

  1、使用Q.nfcall

  相對於Q.fcall ,Q.nfcall 就是node 的Q.fcall。

  代碼如下:

  var FS = require('fs'),

  Q = require('q'),

  colors = require('colors'),

  file = 'example.txt';

  var fsReadFile = Q.nfcall(FS.readFile,file,encoding);

  fsReadFile.then(function(result){

  console.log((“invoke in nfcall ” + file).red);

  console.log(result.green);

  },function(error){

  console.log(“invoke in nfcall”.red);

  console.log(error.toString().red);

  }

  );

  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、使用makeNodeResolver()

  代碼如下:

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

  });

copyright © 萬盛學電腦網 all rights reserved