讲讲标准的 Promise 长啥样?

作者:feix760

序言

不同项目下lib里的promise/deferred往往是差异化最多的,用起来和自己的习惯相比经常是缺胳膊少腿,因此聊聊标准的Promise的啥样的。

不同的 Promise 差异基本表现如下:

  • 构造Promise对象 new Promise().resolve() ornew Pomise(function(resolve, reject) {})
  • 是否有 .done() .fail() .always() 等方法
  • 是否有Promise.all()方法
  • 是否有isRejected() isResolved()
  • .then() return 结果链式的处理

有哪些标准

Promises/A+兼容扩展Promises/A而来,es6里的Promise准守Promises/A+规范,也是当今的标准规范。

标准的 Promise

构造 :

  • new Promise(function(resolve, reject) {})

静态方法 :

  • Promise.all(iterable)
  • Promise.race(iterable)
  • Promise.reject(reason)
  • Promise.resolve(value)

对象方法:

  • Promise.prototype.then(onFulfilled, onRejected)
  • Promise.prototype.catch(onRejected)

then方法参数onFulfilled可以直接返回数据/Promise实现链式,onRejected可以返回Promise反转结果链式

不标准的使用

  • 构造Promise对象: new Promise().resolve() ( 请使用new Promise(function(resolve, reject) {}) )
  • .done() .fail() .always() 方法的使用 ( 请使用.then() .catch())
  • isRejected() isResolved() 方法的使用

第三方库的支持

  • node 0.12+ 支持标准es6 promise规范
  • npm promise 支持标准es6规范,增加了done()等方法
  • npm node-promise 支持标准es6规范,增加了更多的工具方法,人气不如npm promise
  • jquery promise Promises/A 都没完整准守,存在.done() .fail().always()等各种方法,.then()的链式处理弱爆了

原文链接:http://ivweb.io/topic/5635d97709e01a534b461eaf

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一名合格java开发的自我修养

jdbc操作根据bean类自动组装sql,天啦,我感觉我实现了hibernate

场景:需要将从ODPS数仓中计算得到的大额可疑交易信息导入到业务系统的mysql中供业务系统审核。但是本系统是开放是为了产品化,要保证不同环境的可移植性,同时同...

1242
来自专栏Netkiller

java 脚本引擎

本文节选自《Netkiller Java 手札》 第 18 章 java 脚本引擎 目录 18.1. Maven 18.2. Helloworld 18.3. ...

3515
来自专栏技术专栏

logback日志写入kafka遇到的那些坑

这两天在学习storm实时流的时候需要将logback日志写入kafka,这期间遇到了很多坑,这里把遇到的坑和解决的问题记录一下,和大家共勉

2713
来自专栏冰霜之地

ReactiveCocoa 中 RACCommand 底层实现分析

在ReactiveCocoa 过程中,除去RACSignal和RACSubject这些信号类以外,有些时候我们可能还需要封装一些固定的操作集合。这些操作集合都是...

922
来自专栏后端之路

Dubbo序列化之hessian2

根据前面的说明可以知道序列化功能依然使用spi,我们来查看一下 package com.alibaba.dubbo.common.serialize; im...

1K8
来自专栏世界第一语言是java

java根据ip地址获取城市地域信息

2005
来自专栏ml

spring设置全局异常处理器

1.spring设置全局异常,它的原理是向上捕获 spring.xml配置 <!--自定义全局异常处理器--> <bean id="globalE...

35915
来自专栏与神兽党一起成长

使用Mockito修改Bean的依赖

在使用单元测试时经常会遇到某些dependency依赖了外部资源,或者想主动绕过真正的方法执行mock返回结果而快速得到单元测试最终的期望结果,可能有以下两种场...

652
来自专栏進无尽的文章

多线程-NSOperation和NSOperationQueue

NSOperation类是用来封装在单个任务相关的代码和数据的抽象类。NSOperation 是苹果公司对 GCD 的封装,完全面向对象,所以使用起来更好理解。...

1083
来自专栏小灰灰

Java 线程学习

Java 线程相关 如何创建线程(两种方式,区别,使用场景) 线程状态调度 多线程数据共享(会有什么问题,如何实现共享,多线程操作同一个变量会有什么问题,如果不...

1969

扫码关注云+社区