zoukankan      html  css  js  c++  java
  • 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);
    });
     
  • 相关阅读:
    iOS 应用内付费(IAP)开发步骤
    国内银行CNAPS CODE 查询 苹果开发者,应用内购,需要填写税务相关信息必须的
    untiy 插件工具: 游戏中 策划数据Excel 导出到项目中
    大陆 Google play 开发者注册(2016)
    unity UGUI动态字体显示模糊
    Vue--webpack实时重新加载
    Vue--webpack打包css、image资源
    Vue--webpack打包js文件
    Vue--axios
    Vue--生命周期
  • 原文地址:https://www.cnblogs.com/ok123/p/4121149.html
Copyright © 2011-2022 走看看