日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Promises/A+规范中文翻译

發(fā)布時間:2024/8/1 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Promises/A+规范中文翻译 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

翻譯: https://promisesaplus.com/
Javascript Promise是一個全面、通用的開放標準,由開發(fā)者指定,為開發(fā)者參考。
Promise代表異步操作的最終結(jié)果。與promise對象交互的主要方式是通過.then()方法,then()方法注冊了回調(diào)函數(shù),用于接收最終結(jié)果或者拒絕的原因。
這個規(guī)范詳細說明了.then方法的執(zhí)行流程,為所有遵循Promises/A+標準的開發(fā)者提供共用的基礎。嚴格來說,本規(guī)范相當穩(wěn)定了。盡管Promises/A+組織為了處理一些新發(fā)現(xiàn)的邊角問題,偶爾可能會修改本規(guī)范,這些修改時微小的,向后兼容的,我們僅僅會在深思熟慮、討論、測試之后修改較大且向后不兼容的部分。
從歷史來說,Promises/A+把早期的Promises/A+建議明確了行為規(guī)范,擴展了原有的約定俗成的行為,并刪除了不明確的或有問題的部分。
最后呢,Promises/A+規(guī)范的核心不是對promise如何創(chuàng)建、解決、拒絕,而是集中力量提供一個通用的then方法。未來,這些方法可能會用在其他規(guī)范中。

1. 術(shù)語

1.1 “promise”是一個帶有then方法的對象或函數(shù),其行為符合本規(guī)范;
1.2 “thenable”是一個定義了then方法的對象或函數(shù);
1.3 值(“value”)是任何一個JavaScript合法值(包括undefined,a thenable, 或者a promise)
1.4 異常( “exception”)是使用throw拋出來的一個值
1.5 原因(“reason”)表示promise狀態(tài)為rejected時的值。

2. 必要條件

2.1 Promise狀態(tài)

一個promise當前狀態(tài)必須是 pending, fulfilled, rejected中一種。
2.1.1 promise狀態(tài)為pending
2.1.1.1 promise狀態(tài)可能會轉(zhuǎn)成fulfilled或rejected
2.1.2 promise狀態(tài)為fulfilled
2.1.2.1 不能再轉(zhuǎn)化為其他狀態(tài);
2.1.2.2 必須有一個不變的值;
2.1.3 promise狀態(tài)為rejected
2.1.3.1 不能再轉(zhuǎn)化為其他狀態(tài);
2.1.3.2 必須有一個不變的原因;
這里的不可變指的是恒等(即 ===),而不是深層次的不可變。

2.2 then方法

promise必須提供一個then方法來訪問當前值或最終結(jié)果或者拒絕原因。
Promise的then方法接收兩個參數(shù):

promise.then(onFulfilled, onRejected)

2.2.1 onFulfilled, onRejected兩個都是可選參數(shù)
2.2.1.1 如果onFulfilled不是函數(shù),必須被忽略
2.2.1.2 如果onRejected不是函數(shù),必須被忽略
2.2.2 如果onFulfilled是函數(shù)
2.2.2.1 它必須在promise是fulfilled狀態(tài)后(即成功后)被調(diào)用,他的第一個參數(shù)就是promise終值;
2.2.2.2 它在promise狀態(tài)變成fulfilled之前不能被調(diào)用
2.2.2.3 他只能被調(diào)用一次
2.2.3 如果onRejected是函數(shù)
2.2.3.1 它必須在promise是rejected狀態(tài)后(即失敗后)被調(diào)用,他的第一個參數(shù)就是promise終值;
2.2.3.2 它在promise狀態(tài)變成rejected之前不能被調(diào)用
2.2.3.3 他只能被調(diào)用一次
2.2.4 onFulfilled 或 onRejected只有在執(zhí)行環(huán)境棧中包含平臺代碼時才能被調(diào)用
2.2.5 onFulfilled 和onRejected必須作為函數(shù)被調(diào)用(沒有this值)
2.2.6 then方法可能被同一個promise調(diào)用多次
2.2.6.1 promise狀態(tài)是fulfilled(成功執(zhí)行)時,所有onFulfilled回調(diào)函數(shù)按照注冊順序調(diào)用;
2.2.6.2 promise狀態(tài)是rejected(執(zhí)行失敗)時,所有onRejected回調(diào)函數(shù)按照注冊順序調(diào)用;
2.2.7 then必須返回一個promise

promise2 = promise1.then(onFulfilled, onRejected);

2.2.7.1 如果onFulfilled 或 onRejected返回一個值x,promise解決過程:

[[Resolve]](promise2, x)

2.2.7.2 如果onFulfilled 或 onRejected拋出一個異常e,promise2必須拒絕執(zhí)行,返回e
2.2.7.3 如果 onFulfilled 不是函數(shù)并且 promise1 成功執(zhí)行, promise2 必須成功執(zhí)行并返回相同的值
2.2.7.4 如果 onRejected 不是函數(shù)并且 promise1 拒絕執(zhí)行, promise2 必須拒絕執(zhí)行并返回相同的原因

2.3 promise解決過程

promise解決過程是一個抽象操作,當輸入一個promise或一個值,我們用[[Resolve]](promise, x)表示,如果x是一個thenable,假如它表現(xiàn)得像a promise,它會使promise嘗試接受x的狀態(tài),否則會用x值執(zhí)行promise。
thenables的特性使promise的實現(xiàn)具有通用性,只要它們暴出一個遵循Promises/A+規(guī)范的then方法。并且它也使遵循 Promise/A+ 規(guī)范的實現(xiàn)可以接受那些不符合規(guī)范但合理的then方法的實現(xiàn)。
執(zhí)行 [[Resolve]](promise, x) 需遵循以下步驟:
2.3.1 如果promise與x指向同一個對象,以TypeError拒絕執(zhí)行promise
2.3.2 如果x是一個promise,就會接受他的狀態(tài)
2.3.2.1 如果 x 處于pending, promise 需保持為pending直至 x變成fulfilled或rejected,
2.3.2.2 如果 x 處于fulfilled,用相同的值執(zhí)行 promise
2.3.2.3 如果 x 處于rejected,用相同的據(jù)因拒絕 promise
2.3.3 如果x是一個對象或函數(shù)
2.3.3.1 把 x.then 賦值給 then
2.3.3.2 如果x.then拋出異常e,則以e為原因拒絕promise
2.3.3.3 如果 then 是函數(shù),將 x 作為 this 調(diào)用。傳遞兩個回調(diào)函數(shù)作為參數(shù),第一個參數(shù)叫做 resolvePromise ,第二個參數(shù)叫做 rejectPromise:
2.3.3.3.1 如果 resolvePromise 以值 y 被調(diào)用,則執(zhí)行 [[Resolve]](promise, y)
2.3.3.3.2 如果 rejectPromise 以 r 為被調(diào)用,則以 r 拒絕 promise
2.3.3.3.3 如果 resolvePromise 和 rejectPromise 都被調(diào)用,或者被同一參數(shù)調(diào)用了多次,則優(yōu)先采用首次調(diào)用,忽略剩下的調(diào)用
2.3.3.3.4 如果調(diào)用 then 方法拋出了異常 e
2.3.3.3.4.1 如果 resolvePromise 或 rejectPromise 已經(jīng)被調(diào)用,則忽略它
2.3.3.3.4.2 否則以 e 為原因拒絕 promise
2.3.3.4 如果 then 不是函數(shù),以 x 為參數(shù)執(zhí)行 promise
2.3.4 如果 x 不為對象或者函數(shù),以 x 為參數(shù)執(zhí)行 promise
如果一個 promise 是通過循環(huán)的 thenable 鏈中的對象解決的,而 [[Resolve]](promise, thenable) 的遞歸性質(zhì)又使得其被再次調(diào)用,根據(jù)上述的算法將會陷入無限遞歸之中。算法雖不強制要求,但也鼓勵施者檢測這樣的遞歸是否存在,若檢測到存在則以一個可識別的 TypeError 來拒絕 promise。

總結(jié)

以上是生活随笔為你收集整理的Promises/A+规范中文翻译的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。