博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
谈谈Javascript异步编程以及新的实现方法--Promise
阅读量:6849 次
发布时间:2019-06-26

本文共 1126 字,大约阅读时间需要 3 分钟。

    最近看到好多文章都在讲Promise,为什么现在异步编程会受到如此重视?又为什么异步编程要选择Promise呢?

    先来说说第一个问题,异步编程能受到如此重视很大原因是因为javascript正在逐渐走向标准化、规范化(MVC,模块,OOP),所以一些传统编程领域的规范化约束发挥的作用也越来越大了,而且javascript本身就是围绕"异步"来进行的,无论是浏览器端还是node服务器端,大多数的API都是通过"事件"来将请求和返回值分离的。简单来说:javascript受到了重视了,而它本身呢异步编程偏多.

    接下来便是第二个问题,异步编程为什么要选择promise呢?上面说到了"事件",讲到"事件"是一定离不开回调的。而回调呢,作为传统的实现异步编程有三大方法(回调、事件监听、发布/订阅)之一,实现起来是不太利索的,一层层的回调嵌套足够让你陷入"回调地狱",大大降低了程序逻辑的可读性。所以这时候,Promise救世主(先知)出现了,Promise是CommonJS工作组规范制定出来的一种机制,为了给异步编程提供统一的接口,实现规范化的异步编程管理,而且when/then的链式写法让流程清晰明了.它的作用场景主要是用于耗时的场景(在node中问题比较凸显,因为node本身就是异步编程驱动的),比如与后台交互的AJAX、Socket以及某一模块存在大量回调嵌套时

    简单介绍之后呢,我们来看看它的工作流程(图) Promise返回状态 -- > then接收状态,并使用回调处理相应状态

     

    Promise为实例对象,该对象接收一个或者多个参数请求(多个请求时使用when(f1,f2)),最终返回的是一个有限状态机,拥有以下状态:

  • 完成(resolve)
  • 否定(rejected)
  • 等待(pending)

    返回状态后then(onResolve,onReject)对相应的状态做出相应的onXXX回调处理,then(onResolve,onReject)是个链式方法,让使用者分别处理成功失败.

    有一个Deffered对象(到目前为止,我对Deffered的认识还是模模糊糊的)

  • 提供resolve和rejected方法,来完成一个Promise

   最后列出支持Promise的常用框架:浏览器自带new Promise APIjQuery里的$.deferred() AngularJs 里的$q.defer()、dojo里的Promise抽象基类以及服务器端node上的Promise库

   或者可以自己搭建实现一个Promise框架.

转载于:https://www.cnblogs.com/veeking/p/3948256.html

你可能感兴趣的文章
Lucene.net入门学习(结合盘古分词)(转载)
查看>>
我心中的核心组件(可插拔的AOP)~第三回 日志记录组件之log4net
查看>>
DDD~Unity在DDD中的使用
查看>>
在react中实现打印功能
查看>>
实现动态系统托盘图标
查看>>
互联网部-供应商团队js规范
查看>>
用Office Viso 2010创建SharePoint 2010 工作流
查看>>
用Python写一个小爬虫吧!
查看>>
jQuery的封装和扩展方式
查看>>
问题解决 sql server 2008 评估期已过期解决办法
查看>>
工具 EZDML表结构设计器
查看>>
终于掌握vim的寄存器和系统剪贴板的使用了- 要安装vim-X11包
查看>>
Boost下载安装编译配置使用指南(含Windows和Linux) .
查看>>
深度分析 Java 的 ClassLoader 机制(源码级别)
查看>>
Oracle 获取前几行数据问题的陷阱
查看>>
SpringBoot聚合项目打包
查看>>
设计模式之抽象工厂模式
查看>>
批量远程执行linux服务器程序--基于pxpect(多进程、记日志版)
查看>>
栅格计算器初试
查看>>
[原创]基于proteus仿真16*64点阵屏带DS1302实钟芯片
查看>>