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 的资料请关注脚本之家其它相关文章!

相关文章

  • node.js调用脚本(python/shell)和系统命令

    node.js调用脚本(python/shell)和系统命令

    这篇文章介绍了node.js调用脚本(python/shell)和系统命令的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • Node.js中流(stream)的使用方法示例

    Node.js中流(stream)的使用方法示例

    Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。下面这篇文章主要给大家介绍了关于Node.js中流(stream)的使用方法示例,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • 关于NodeJS中的循环引用详解

    关于NodeJS中的循环引用详解

    这篇文章主要给大家介绍了关于NodeJS中的循环引用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用NodeJS具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • Node.js检测端口(port)是否被占用的简单示例

    Node.js检测端口(port)是否被占用的简单示例

    大家有没有遇到过在开启本地服务时,有这么一种情况:当前端口已经被另一个项目使用了,导致服务开启失败。那么接下来,我们通过简简单单的示例代码来检测端口是否已经被占用。有需要的朋友们可以参考借鉴。
    2016-09-09
  • Node.js 学习笔记之简介、安装及配置

    Node.js 学习笔记之简介、安装及配置

    本文是Node.js学习笔记系列文章的第一篇,主要给大家讲解的是在Windows和Linux上安装Node.js的方法。软件安装版本以0.12.0为例。希望大家能够喜欢。
    2015-03-03
  • 关于NodeJs和JAVA建立socket连接方式

    关于NodeJs和JAVA建立socket连接方式

    这篇文章主要介绍了关于NodeJs和JAVA建立socket连接方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 浅谈如何把Node项目部署到服务器上

    浅谈如何把Node项目部署到服务器上

    本文主要介绍了浅谈如何把Node项目部署到服务器上,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Node.js之网络通讯模块实现浅析

    Node.js之网络通讯模块实现浅析

    本篇文章主要介绍了Node.js之网络通讯模块实现浅析,具有一定的参考价值,有兴趣的可以了解一下。
    2017-04-04
  • 为何从eggjs升级到midwayjs的原因详解

    为何从eggjs升级到midwayjs的原因详解

    这篇文章主要为大家介绍了为何从eggjs升级到midwayjs的原因详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Node4-5静态资源服务器实战以及优化压缩文件实例内容

    Node4-5静态资源服务器实战以及优化压缩文件实例内容

    这篇文章主要介绍了Node4-5静态资源服务器实战以及优化压缩文件实例内容,有需要的朋友们可以参考学习下。
    2019-08-08

最新评论