您现在的位置: 万盛学电脑网 >> 程序编程 >> 脚本专题 >> javascript >> 正文

node.js中使用q.js实现api的promise化

作者:佚名    责任编辑:admin    更新时间:2022-06-22

   这里我们看看怎么用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);

  });