• q.js实现nodejs顺序调用


    nodejs的异步调用有时候是最让人头疼的,如何能是一些代码顺序的执行呢,这里和大家分享nodejs的promise

    什么是promise

    promise一个标准,它描述了异步调用的返回结果,包括正确返回结果和错误处理。关于详细的说明文档可以参考Promises/A+。目前实现promise标准的模块有很多,如Q、bluebird和Deferred,下面我们以Q为例,介绍一下promisenodejs中的使用方法。

    我查找了关于promise的使用,其中最好用的就是q.js了,个人觉得。当然还有promise.js,有兴趣的朋友可以研究一下,这里主要说一下q.js的用法。

    首先下载安装q.js——

    npm install q

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

    );

    Q.fcall(function () {
    return "1";
    })
    .then(function(value2){
    console.log("打印", value2);
    return User.test(value2);
    })
    .then(function (value3) {
    console.log(value3);
    return "3";
    })
    .then(function (value4) {
    console.log(value4);
    return "4";
    })
    .then(function (value4) {
    // Do something with value4
    console.log("显示:", value4);
    })
    .catch(function (error) {
    // 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、使用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);
    });
     
  • 相关阅读:
    luoguP3806 【模板】点分治1
    BZOJ 4176: Lucas的数论 莫比乌斯反演 + 杜教筛
    BZOJ 3994: [SDOI2015]约数个数和 莫比乌斯反演
    CF1037H Security 后缀自动机 + right集合线段树合并 + 贪心
    BZOJ 2226: [Spoj 5971] LCMSum 莫比乌斯反演 + 严重卡常
    BZOJ 4408: [Fjoi 2016]神秘数 主席树 + 神题
    BZOJ 4804: 欧拉心算 欧拉函数
    BZOJ 3930: [CQOI2015]选数 莫比乌斯反演 + 杜教筛
    html基础总结
    对于房天下租房信息进行爬取
  • 原文地址:https://www.cnblogs.com/ok123/p/4121149.html
Copyright © 2020-2023  润新知