node NPM库promise 异步任务状态管理

 更新时间:2023年07月24日 14:03:12   作者:脉冲云_梁兴臣  
这篇文章主要介绍了node NPM库promise 异步任务状态管理

NPM酷库

每天两分钟,了解一个流行NPM库。

JavaScript的优势就在于其基于异步事件模型,从而Node.js能够拥有非常强大的性能表现。但是,JavaScript的callback方式做异步处理,多层级情况下对人而言简直是噩梦,故而称之为回调地域:

Model.count(filters, (error, count) => {
    if(error) {
        console.error(error);
    } else {
        Model.find(filters, (error, result) => {
            if(error) {
                console.error(error);
            } else {
                // ...
            }
        })
    }
})

上述代码中,仅仅包含两层回调,在实际开发中,经常会遇到处理涉及七八层回调的情况,可以想象多么恐怖,针对这种情况,产生了一系列的异步任务管理库,Promise就是最常用的一个。

Promise

Promise 是一个划时代的库,因为Promise产生后,后续的ES7标准的async/await就是基于Promise的,而async/await机制让人能够以同步样式的代码处理异步任务,彻底解决了回调问题。

而Promise的机制其实很简单,它将异步任务抽象为三种状态Pending(进行中)、Fulfilled(完成)、Rejected(失败)。

针对上文中的代码,用Promise方式可以写成:

Model.count(filters)
  .then((count)=>{
    return Model.find(filters);
  })
  .then((results)=>{
    // ...
  })
  .catch((error)=>{
    console.error(error)
  });

用Promise改写后,原来的多层回调会被“拉扁”成1~2层,形成一个链状调用。当然前提是上述的Model.find()Model.count()得支持Promise方式调用,如果不支持,我们可以将一个callback方式的函数转换成Promise样式:

function find(filters){
  return new Promise((resolve,reject)=>{
    Model.find(filters,(error,results)=>{
      if(error){
        reject(error);
      }else{
        resolve(results);
      }
    });
  });
}

上述代码中find()函数返回了一个Promise对象,遗憾的是某些古老的浏览器没有内置Promise对象,那么我们可以使用promise库:

const Promise = require('promise');

参考资料

https://developer.mozilla.org...

https://github.com/then/promise

以上就是node NPM库promise 异步任务状态管理的详细内容,更多关于node NPM库promise 的资料请关注脚本之家其它相关文章!

相关文章

  • NodeJS有难度的面试题(能答对几个)

    NodeJS有难度的面试题(能答对几个)

    这篇文章主要介绍了NodeJS有难度的面试题(能答对几个),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Node.js事件驱动

    Node.js事件驱动

    Node.Js是基于javascript语言,建构在google V8 engine以及Linux上的一个非阻塞事件驱动IO框架。这里主要不是介绍nodejs具体应用代码,而是想介绍一下事件驱动编程。
    2015-06-06
  • 解决使用node命令提示:'node'不是内部或外部命令,也不是可运行的程序

    解决使用node命令提示:'node'不是内部或外部命令,也不是可运行的程序

    最近在工作中遇到了个常见的问题,分享给大家,这篇文章主要给大家介绍了关于如何解决使用node命令提示:'node'不是内部或外部命令,也不是可运行的程序的相关资料,需要的朋友可以参考下
    2023-02-02
  • nodejs express搭建服务并热更新文件过程详解

    nodejs express搭建服务并热更新文件过程详解

    这篇文章主要为大家介绍了nodejs express搭建服务并热更新文件过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Node.js中Koa2在控制台输出请求日志的方法示例

    Node.js中Koa2在控制台输出请求日志的方法示例

    这篇文章主要给大家介绍了关于Node.js中Koa2在控制台输出请求日志的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Node.js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • 手写Node静态资源服务器的实现方法

    手写Node静态资源服务器的实现方法

    这篇文章主要介绍了手写Node静态资源服务器的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 用node-webkit把web应用打包成桌面应用(windows环境)

    用node-webkit把web应用打包成桌面应用(windows环境)

    这篇文章主要介绍了windows环境下用node-webkit把web应用打包成桌面应用的教程,需要的朋友可以参考下
    2018-02-02
  • 解析Node.js基于模块和包的代码部署方式

    解析Node.js基于模块和包的代码部署方式

    这篇文章主要介绍了解析Node.js基于模块和包的代码部署方式,作为一个服务于本地操作系统的JavaScript解释器,Node采用了简洁的基于模块和包概念的部署方式,需要的朋友可以参考下
    2016-02-02
  • Node.JS使用Sequelize操作MySQL的示例代码

    Node.JS使用Sequelize操作MySQL的示例代码

    Node.JS提供了操作数据库的基础接口,本篇文章主要介绍了Node.JS使用Sequelize操作MySQL的示例代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-10-10
  • 阿里云OSS实践文件直传基于服务端

    阿里云OSS实践文件直传基于服务端

    这篇文章主要为大家介绍了阿里云OSS实践文件直传基于服务端实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06

最新评论