PromiseA + 規(guī)范
術(shù)語
1、promise 是一個(gè)有 then 方法的對象或者函數(shù),行為遵循 promiseA+規(guī)范
2、thenable,有then 方法的函數(shù)或者對象,
3、value promise 成功狀態(tài)時(shí)的值,**resolve **的參數(shù)
4、reason promise 狀態(tài)失敗時(shí)候的值,表示各種拒絕的原因
5、exception 異常值
規(guī)范
Promise sates 狀態(tài)
pending: 初始的狀態(tài)可改變
1.1 resolve: pending->fulfilled(成功) 狀態(tài)
1.2 reject:pending-> rejected 狀態(tài)fulfilled 最終態(tài),不可變
2.1 最終態(tài),不可變
2.2 一個(gè) promise 被 resolve 后變成這種狀態(tài)
2.3 必須擁有一個(gè) value 值rejected
3.1 最終態(tài),不可變
3.2 一個(gè) promise 被 reject 后會變成這個(gè)狀態(tài)
3.3 必須擁有一個(gè) reason 值(可是 undefined)
狀態(tài)流轉(zhuǎn):
pending->resolve(value) -> fulfilled
pending->reject(reason) -> rejected
then
promise 應(yīng)該有一個(gè) then 方法,用來訪問最終的結(jié)果
promise.then(onFulfilled,onRejected)
- 參數(shù)要求
1.1 onFulfilled 必須是一個(gè)函數(shù)類型,如果不是,應(yīng)該被**忽略**
1.2 onRejected 必須是一個(gè)函數(shù)類型,如果不是,應(yīng)該被**忽略**
onFulfilled 特性
2.1 promise 變成 fulfilled 的時(shí)候,應(yīng)該調(diào)用 onFulfilled 這個(gè)函數(shù),參數(shù)是 value
2.2 promise 編程 fulfilled 之前,不應(yīng)該被調(diào)用
2.3 只能被調(diào)用一次onRejected 特性
3.1 promise 變成 rejected 的時(shí)候,應(yīng)該調(diào)用 onRejected 這個(gè)函數(shù),參數(shù)是 value
3.2 promise 編程 rejected 之前,不應(yīng)該被調(diào)用
3.3 只能被調(diào)用一次onFulfilled 和 onRejected 執(zhí)行環(huán)境應(yīng)該是微任務(wù)里面
queueMicrotask(()=>{})//微任務(wù)
- then方法可以被調(diào)用多次
- 返回值
then 返回值應(yīng)該是一個(gè) Promise,是一個(gè)新的 Promise
```js
const promise1 = new Promise();
const promise2 = promise1.then(cb1,cb2)
```
6.1 onFulfilled 或者 onRejected 執(zhí)行的結(jié)果為 x,調(diào)用 resolvePromise()
6.2 onFulfilled 或者 onRejected 執(zhí)行的時(shí)候報(bào)錯了,promise2 就需要被 reject
6.3
- resolvePromise
then 如果是一個(gè)函數(shù), then.call(x) => x.then