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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

理解Promise (4)

發布時間:2025/4/14 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理解Promise (4) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

then 方法必須?返回一個新的promise

promise2 = promise1.then(onFulfilled, onRejected);

新的Promise 必須返回傳遞兩個方法? onFulfilled, onRejected

If either onFulfilled or onRejected returns a value x, run the Promise Resolution Procedure [[Resolve]](promise2, x).

onFulfilled, onRejected? 其中的某個都要返回 一個value

if either?onFulfilled?or?onRejected?returns a value?x, run the Promise Resolution Procedure?[[Resolve]](promise2, x)

如果onfulled或onrejected返回值x,請運行承諾解決過程[[解決]](promise2,x)。

let x = onfulfilled(this.value);// x是普通值還是promise 如果是普通值 直接調用promise2的resolve// 如果是promise 那應該讓x這個promise執行 x.thenresolvePromise(promise2,x,resolve,reject);

這段代碼是??resolvePromise? ??承諾解決過程

resolvePromise? 這個函數里面 有Promise 這個參數,所以我們要拿到這個值 但是我們直接打印出來這個值 是 underfind 所以我們要用?promise2

這樣,我們做到這里的時候? then 方法的大概結構就出來了?

then(onfulfilled,onrejected){ let promise2;promise2 = new Promise((resolve,reject)=>{if(this.status === 'fulfilled'){setTimeout(()=>{ try{let x = onfulfilled(this.value);// x是普通值還是promise 如果是普通值 直接調用promise2的resolve// 如果是promise 那應該讓x這個promise執行 x.then resolvePromise(promise2,x,resolve,reject);}catch(e){reject(e);}},0);}if(this.status === 'rejected'){setTimeout(()=>{try{let x = onrejected(this.reason);resolvePromise(promise2,x,resolve,reject);}catch(e){reject(e);}},0)}if(this.status === 'pending'){this.resolveCallbacks.push(()=>{setTimeout(()=>{try{let x = onfulfilled(this.value);resolvePromise(promise2,x,resolve,reject);}catch(e){reject(e);}},0)});this.rejectCallbacks.push(()=>{setTimeout(()=>{try{let x = onrejected(this.reason);resolvePromise(promise2,x,resolve,reject);}catch(e){reject(e);}},0)})}});return promise2}

接下來我們來處理? ?The Promise Resolution Procedure? 的問題?

If?promise?and?x?refer to the same object, reject?promise?with a?TypeError?as the reason.

let resolvePromise = (promise2,x,resolve,reject) => {if(promise2 === x){return reject(new TypeError('循環引用'))} }

?if?x?is an object or function,

if(typeof x === 'function' || (typeof x === 'object' && x !== null)){}

Let?then?be?x.then

let then = x.then; // 如果取then方法出錯 那就用錯誤拒絕promise2
  • f/when?resolvePromise?is called with a value?y, run?[[Resolve]](promise, y).
  • If/when?rejectPromise?is called with a reason?r, reject?promise?with?r.
  • If both?resolvePromise?and?rejectPromise?are called, or multiple calls to the same argument are made, the first call takes precedence, and any further calls are ignored.
  • ? ? ? ?

    if(typeof then === 'function'){ // 我就認為他是一個promisethen.call(x,y=>{ // 讓當前的promise執行 ,不用多次取then方法了// y 有可能還是一個promise , 繼續調用resolvePromise方法,直到解析出一個常量為止,最終把常量傳遞下去if(called) return; // 放置此方法多次被調用called = true;resolvePromise(promise2,y,resolve,reject);},r=>{if(called) return;called = true;reject(r); // 讓當前的promise變成失敗態即可 })}else{// x就是一個普通的對象 并沒有then方法 resolve(x);}

    全部的代碼:

    ?

    let resolvePromise = (promise2,x,resolve,reject) => {// 判斷x的類型 來處理promise2是成功還是失敗// 所有的promise都遵循這個規范,不同的人寫的promise可能會混用// 盡可能考慮的周全 要考慮別人promise可能出錯的情況if(promise2 === x){return reject(new TypeError('循環引用'))}// 判斷x是不是一個promise ,這個x 可能不是自己的promise 所以為了安全 需要在進行校驗,放置調一起用成功和失敗 if(typeof x === 'function' || (typeof x === 'object' && x !== null)){// 嘗試取當前x的then方法, 這個then方法可能別人定義的時候 用的Object.defineProperty let called;try{let then = x.then; // 如果取then方法出錯 那就用錯誤拒絕promise2if(typeof then === 'function'){ // 我就認為他是一個promisethen.call(x,y=>{ // 讓當前的promise執行 ,不用多次取then方法了// y 有可能還是一個promise , 繼續調用resolvePromise方法,直到解析出一個常量為止,最終把常量傳遞下去if(called) return; // 放置此方法多次被調用called = true;resolvePromise(promise2,y,resolve,reject);},r=>{if(called) return;called = true;reject(r); // 讓當前的promise變成失敗態即可 })}else{// x就是一個普通的對象 并沒有then方法 resolve(x);}}catch(e){if(called) return;called = true;reject(e);}}else{// x肯定一個常量 resolve(x);} }class Promise{constructor(executor){this.status = 'pending'; this.value; this.reason;this.resolveCallbacks = []; // 當then是pending 我希望吧成功的方法都放到數組中this.rejectCallbacks = [];let resolve = (value)=>{if(this.status == 'pending'){this.status = 'fulfilled';this.value = value;this.resolveCallbacks.forEach(fn=>fn()); // 發布 }}let reject = (reason)=>{if(this.status === 'pending'){this.status = 'rejected';this.reason = reason;this.rejectCallbacks.forEach(fn=>fn())}}try{executor(resolve,reject);}catch(e){reject(e);}}then(onfulfilled,onrejected){ let promise2;promise2 = new Promise((resolve,reject)=>{if(this.status === 'fulfilled'){setTimeout(()=>{ try{let x = onfulfilled(this.value);// x是普通值還是promise 如果是普通值 直接調用promise2的resolve// 如果是promise 那應該讓x這個promise執行 x.then resolvePromise(promise2,x,resolve,reject);}catch(e){reject(e);}},0);}if(this.status === 'rejected'){setTimeout(()=>{try{let x = onrejected(this.reason);resolvePromise(promise2,x,resolve,reject);}catch(e){reject(e);}},0)}if(this.status === 'pending'){this.resolveCallbacks.push(()=>{setTimeout(()=>{try{let x = onfulfilled(this.value);resolvePromise(promise2,x,resolve,reject);}catch(e){reject(e);}},0)});this.rejectCallbacks.push(()=>{setTimeout(()=>{try{let x = onrejected(this.reason);resolvePromise(promise2,x,resolve,reject);}catch(e){reject(e);}},0)})}});return promise2} } module.exports = Promise;

    ?

    ?

    https://promisesaplus.com/

    轉載于:https://www.cnblogs.com/guangzhou11/p/11307074.html

    總結

    以上是生活随笔為你收集整理的理解Promise (4)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 男生插女生视频 | 亚洲图片二区 | 一区二区精品在线观看 | 国产一区99 | 动漫美女隐私无遮挡 | 欧美xxxx中国 | 亚洲夜夜夜 | 播播网色播播 | 欧美xxxxx高潮喷水麻豆 | 网红福利视频 | 9l视频自拍蝌蚪9l视频 | 欧美国产91 | 91精品国产一区二区三区香蕉 | 欧美性生活一区二区 | 涩涩视频网站在线观看 | 好吊妞这里有精品 | 国产精品一区二区免费视频 | 偷拍一区二区三区 | 操一操av | 丝袜调教91porn | 伊人超碰在线 | www.av日韩 | 中文字幕第一区综合 | 青青草97国产精品麻豆 | 精品一区李梓熙捆绑 | 国产美女精品视频 | 久久久亚洲综合 | 在线视频免费观看 | 久久久久中文 | 久久久综合精品 | 国产黄色片网站 | 喷水了…太爽了高h | 欧美一级网址 | 欧美午夜小视频 | 国产黄色录像片 | 六月婷婷激情 | 永久免费视频网站直接看 | 午夜免费小视频 | 五月天中文字幕在线 | 91手机在线观看 | 国产第一网站 | 午夜激情四射 | av免播放器 | 国产福利电影在线 | 反差在线观看免费版全集完整版 | 国产综合久久久久久鬼色 | 97超碰在 | 精品人妻一区二区三区日产 | 男男黄网站 | 免费黄色片网站 | 免费a大片 | 欧美xxxx83d| 天天天操操操 | 婷婷五月综合久久中文字幕 | 国内精品久久久久久 | 狠狠干in | 青青草国产在线视频 | 91色视频 | 扒开美女内裤狂揉下部 | 可以看的av网址 | 中国老妇性视频 | av在线第一页 | 久久久免费在线观看 | 亚洲网站免费 | 黄色一级片欧美 | 国产伦精品一区二区三区四区 | 影音先锋色小姐 | 亚洲男人天堂2023 | av大片免费看 | 狠狠v欧美v日韩v亚洲ⅴ | av最新网址| 欧美hdxxxx | 国产成人一区二区三区影院在线 | 中文字幕在线官网 | 日本久久网站 | 黄色在线a | 麻豆网站在线免费观看 | 色女仆影院 | 美女穴穴 | 国产精品v欧美精品v日韩 | 精品一区二区电影 | www九色| 丰满大乳奶做爰ⅹxx视频 | 免费av日韩 | 久久久噜噜噜久久中文字幕色伊伊 | 欧美在线一级 | 精品国产av色一区二区深夜久久 | 人人爽人人香蕉 | 中国爆后菊女人的视频 | 亚洲av无码一区二区三区网站 | 亚洲 欧美 日韩 在线 | 寡妇高潮一级视频免费看 | 亚色av | 欧美美女色图 | 国产精品毛片一区二区在线看舒淇 | 蜜桃久久av | 日本黄网站在线观看 | av色在线 | 岛国av毛片 |