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);
    });
     
  • 相关阅读:
    2019-6-23-win10-uwp-未给任务-GenerateAppxPackageRecipe-的必需参数-AppxManifestXml-赋值
    2018-8-17-C#-从零开始写-SharpDx-应用-控制台创建-Sharpdx-窗口
    QToolBox
    QListWidget
    宽字节 多字节 mbstowcs wcstombs
    va_start可变参数函数
    c语言二进制、八进制、十六进制
    文件锁 flock/fcntl
    volatile和锁
    串口应用程序
  • 原文地址:https://www.cnblogs.com/ok123/p/4121149.html
Copyright © 2011-2022 走看看