Chinaunix首页 | 论坛 | 博客
  • 博客访问: 390001
  • 博文数量: 273
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1430
  • 用 户 组: 普通用户
  • 注册时间: 2018-02-02 15:57
文章分类

全部博文(273)

文章存档

2018年(273)

我的朋友

分类: JavaScript

2018-07-10 15:03:31

Promise 札记

研究 Promise 的动机大体有以下几点:

  • 对其 api 的不熟悉以及对实现机制的好奇;

  • 很多库(比如 fetch)是基于 Promise 封装的,那么要了解这些库的前置条件得先熟悉 Promise;

  • 要了解其它更为高级的异步操作得先熟悉 Promise;

基于这些目的,实践了一个符合 Promise/A+ 规范的 

本札记系列总共三篇文章,作为之前的文章 Node.js 异步异闻录 的拆分和矫正。

Promise/A+ 核心


1


在实现一个符合 Promise/A+ 规范的 promise 之前,先了解下 Promise/A+ 核心,想更全面地了解可以阅读 

  • Promise 操作只会处在 3 种状态的一种:未完成态(pending)、完成态(resolved) 和失败态(rejected);
  • Promise 的状态只会出现从未完成态向完成态或失败态转化;
  • Promise 的状态一旦转化,将不能被更改;

repromise api 食用手册

Promise.resolve()

Promise.resolve() 括号内有 4 种情况

/* 跟 Promise 对象 */ Promise.resolve(Promise.resolve(1)) // Promise {state: "resolved", data: 1, callbackQueue: Array(0)} /* 跟 thenable 对象 */ var thenable = { then: function(resolve, reject) {
    resolve(1)
  }
} Promise.resolve(thenable) // Promise {state: "resolved", data: 1, callbackQueue: Array(0)} /* 普通参数 */ Promise.resolve(1) // Promise {state: "resolved", data: 1, callbackQueue: Array(0)} /* 不跟参数 */ Promise.resolve() // Promise {state: "resolved", data: undefined, callbackQueue: Array(0)} 复制代码

Promise.reject()

相较于 Promise.resolve(),Promise.reject() 原封不动地返回参数值

Promise.all(arr)

对于 Promise.all(arr) 来说,在参数数组中所有元素都变为决定态后,然后才返回新的 promise。


阅读(668) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~