国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript基礎教程之如何實現一個簡單的promise

2024-05-06 15:30:17
字體:
來源:轉載
供稿:網友

前言

我們在開發過程中大多會用到promise,想必大家對promise的使用都很熟練了,今天我們就來實現一個簡單的promise,實現的效果如有出入還往指正。

Promise/A+規范:

首先重新閱讀了下A+的規范: promise代表了一個異步操作的最終結果,主要是通過then方法來注冊成功以及失敗的情況, Promise/A+歷史上說是實現了Promise/A的行為并且考慮了一些不足之處,他并不關心如何創建,完成,拒絕Promise,只考慮提供一個可協作的then方法。

術語:

promise是一個擁有符合上面的特征的then方法的對象或者方法。 thenable是定義了then方法的對象或者方法 value是任何合法的js的值(包括undefined,thenable或者promise) exception是一個被throw申明拋出的值 reason是一個指明了為什么promise被拒絕

整體結構

我們先來梳理一下整體的結果,以便后續好操作

class MyPromise { constructor(fn){  } resolve(){ } then(){ } reject(){ } catch(){ }}

Promise理論知識

摘抄至 http://es6.ruanyifeng.com/#docs/promise#Promise-all

Promise對象有以下兩個特點。

(1)對象的狀態不受外界影響。Promise對象代表一個異步操作,有三種狀態:pending(進行中)、fulfilled(已成功)和rejected(已失敗)。只有異步操作的結果,可以決定當前是哪一種狀態,任何其他操作都無法改變這個狀態。這也是Promise這個名字的由來,它的英語意思就是“承諾”,表示其他手段無法改變。

(2)一旦狀態改變,就不會再變,任何時候都可以得到這個結果。Promise對象的狀態改變,只有兩種可能:從pending變為fulfilled和從pending變為rejected。只要這兩種情況發生,狀態就凝固了,不會再變了,會一直保持這個結果,這時就稱為 resolved(已定型)。如果改變已經發生了,你再對Promise對象添加回調函數,也會立即得到這個結果。這與事件(Event)完全不同,事件的特點是,如果你錯過了它,再去監聽,是得不到結果的。

總結一下就是promise有三種狀態:pending(進行中)、fulfilled(已成功)和rejected(已失敗),還有就是狀態的改變只能是pending -> fulfilled 或者 pending -> rejected,這些很重要

實現構造函數

現在我們開始實現構造函數

class MyPromise { constructor(fn){ if(typeof fn !== 'function') {  throw new TypeError(`MyPromise fn ${fn} is not a function`) } this.state = 'pending'; this.value = void 0; fn(this.resolve.bind(this),this.reject.bind(this)) } ...}

構造函數接收一個參數fn,且這個參數必須是一個函數,因為我們一般這樣使用new Promise((resolve,reject)=>{});
然后初始化一下promise的狀態,默認開始為pending,初始化value的值。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 尼玛县| 灯塔市| 徐州市| 旬阳县| 博白县| 沁阳市| 白城市| 富顺县| 邵阳县| 商都县| 宜川县| 德安县| 崇州市| 兴宁市| 团风县| 金塔县| 富川| 南和县| 甘德县| 得荣县| 和田县| 潼南县| 普格县| 开化县| 辽阳县| 运城市| 萨嘎县| 新昌县| 平度市| 新和县| 阜城县| 平山县| 苏州市| 聊城市| 朔州市| 连山| 奉化市| 城口县| 福泉市| 香格里拉县| 咸丰县|