Giter Site home page Giter Site logo

promise-a-plus's Introduction

手写 Promise A+

English:en.md

术语

解决(fulfill)

指的是一个 promise 成功时进行的一系列操作,如状态的改变、回调的执行。虽然规范中使用 fulfill 来表示解决,但是目前常用 resolve 来取代。

拒绝(reject)

指的是一个 promise 失败时进行的操作。

终值(eventual value)

所谓终值,指的是 promise 被解决是传递给解决回调的值,由于 promise 有一次性的特征,因此当这个值被传递的时候,标志着 promise 等待态的结束,故称之为终值,也简称为值(value)。

据因(reason)

拒绝的原因,指的是 promise 被拒绝是传递给拒绝回调函数的值。

Promise 的状态

一个 Promise 的当前状态必须为以下三种状态中的一种

等待态(pending)

处于等待态时,promise 可以迁移至执行态和拒绝态。

执行态(fulfilled)

处于执行态时,promise 不能迁移至其他任何状态,必须拥有一个不可变的终值。

拒绝态(rejected)

处于拒绝态时,promise 不能迁移至其他任何状态,必须拥有一个不可变的据因。

Then 方法

一个 标准的 Promise A+ 必须提供一个 then 方法以访问当前值、终值和据因

Promise 的 then 方法接受两个参数:

promise.then(onFulfilled, onRejected)

onFulfilled 和 onRejected 都是可选参数,如果它们不是函数,则它们必须被忽略。

onFulfilled 特性

如果 onFulfilled 是一个函数:

  • 当 promise 执行结束后其必须被调用,其第一个参数为 promise 的终值;
  • 在 promise 执行结束前其不可被调用;
  • 其被调用次数不可超过一次。

onRejected 特性

如果 onRejected 是一个函数:

  • 当 promise 被拒绝后必须被调用,其第一个参数为 promise 的据因;
  • 在 promise 被拒绝前不可被调用;
  • 其被调用次数不可超过一次。

多次调用

then 方法可以被同一个 promise 多次调用:

  • 当 promise 成功执行时,所有 onFulfilled 按照其注册顺序依次回调;
  • 当 promise 被拒绝执行时,所有 onRejected 按照起注册顺序依次回调。

返回

then 方法的返回值可以是一个任意值,如果返回值是一个新的 Promise,那么下一个 then 会在新的 Promise 执行后再调用;如果返回值不是一个 Promise,那么下一个 then 则会被立即调用。

使用方法

  1. 运行脚本 yarn start 启动本地 http 服务,端口号默认为 3000,如果想去修改,请修改 server/index.js
  2. 运行脚本 yarn test 通过 node 运行对应脚本文件,即可查看对应脚本的输出。

promise-a-plus's People

Contributors

laamginghong avatar

Stargazers

Roman avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.