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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

promise的三种状态_一.Promise中核心逻辑的实现

發布時間:2024/8/23 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 promise的三种状态_一.Promise中核心逻辑的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先看一下Promise代碼:

let promise =new Promise((resolve,reject)=>{resolve('成功');//reject('失敗'); }) promise.then(val=>{console.log(val); },reason=>{console.log(reason); })

我們根據以上的一個簡單的用例,得到Promise類的最主要的核心邏輯,分為以下幾個方面:

  • Promise 是一個類,在執行這個類的時候,需要傳遞一個執行器,聲明實例的時候,執行器會立刻執。
  • Promise 中有三種狀態 pending等待(默認) fulfilled成功 rejected失敗 三種狀態關系: fulfilled <= pending => rejected 一旦狀態改變就不可更改。
  • resolve與reject函數是用來更改狀態的。 resolve:fulfilled reject:rejeceted
  • then方法內部做的事情就是判斷狀態,如果狀態是成功,調用成功的回調函數,如果狀態失敗,調用失敗的回調函數。
  • then成功回調一個參數,表示成功之后的值 ;then失敗回調一個參數,表示失敗后的原因。
  • 根據以上得到的部分結論,我們可以實現以下代碼:

    //常量定義三種狀態 以防拼錯與進行代碼提示。 const PENDING='pending'; const FULFILLED='fulfilled'; const REJECTED='rejected';class MyPromise{//執行器constructor(executor){//當前函數this指定MyPromise對象this.resolve=this.resolve.bind(this);this.reject=this.reject.bind(this);//默認狀態this.status=PENDING;//成功返回數據this.value=undefined;//失敗返回原因this.reason=undefined;//執行執行器executor(this.resolve,this.reject);}//成功執行時的方法resolve(value){//因為狀只能是pending=> fulfilled/rejected 如果其他狀態就返回if(this.status!==PENDING) return;//執行之后狀態更改為fulfilledthis.status=FULFILLED;//把成功返回值保存在變量里邊this.value=value;}//失敗執行方法reject(reason){if(this.status!==PENDING) return;this.status=REJECTED;//把失敗返回值保存在變量里邊this.reason=reason;}//then方法執行then(sucessCallback,failCallback){//判斷狀態 來調用回調函數switch(this.status){case FULFILLED:sucessCallback(this.value);break;case REJECTED:failCallback(this.reason);break;default:break;}} }

    我們可以調用MyPromise類來實現文章開頭代碼所展示的功能。

    let promise=new MyPromise((resolve,reject)=>{//resolve('成功');reject('失敗'); }); promise.then(val=>{console.log(val); },reason=>{console.log(reason); })

    目前我們只實現了一個簡單的同步調用邏輯,如果代碼中有異步操作,需要怎么實現呢?

    let promise=new MyPromise((resolve,reject)=>{setTimeout(() => {resolve('成功');}, 1000);//reject('失敗'); }); promise.then(val=>{console.log(val); },reason=>{console.log(reason); })

    請看下篇文章

    李先生:二.Promise中異步邏輯的實現?zhuanlan.zhihu.com

    總結

    以上是生活随笔為你收集整理的promise的三种状态_一.Promise中核心逻辑的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。