国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ES6中Promise、Async/await解決回調(diào)地獄、Proxy代理

這篇具有很好參考價值的文章主要介紹了ES6中Promise、Async/await解決回調(diào)地獄、Proxy代理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.Promise

作為一些場景必須要使用的一個對象,比如說我們要發(fā)送一個請求,但是在發(fā)送這個請求之前我們需要以另一個請求返回的結果中的一個數(shù)據(jù)作為這次請求的參數(shù),也就是說這個請求必須在另一個請求后面,當然我們用setTimeout定時器寫一個延時函數(shù)也可以,但是當有很多請求的時候回造成一層套一層形成回調(diào)地獄。
直接上代碼,代碼里面注釋寫的很清楚

<script>
    // 注:下面的.then的err是因為then()有兩個參數(shù)
    // then((res)=>{},(err)=>{})兩個參數(shù)都是函數(shù)一個是Promise成功的一個是失敗的
    const pr = new Promise(function (resolve, reject) {//這個地方一般用箭頭函數(shù)
        resolve('第一次成功') //成功的時候會給.then一個結果數(shù)據(jù)
        //reject('失敗的信息') //失敗的時候會給.catch一個結果數(shù)據(jù)
    }).then(res => {
        console.log('拿到第一次成功的結果:' + res) //這里的res就是 成功
        //我們拿到第一層成功的結果可以繼續(xù)在里面執(zhí)行下一步操作
        return new Promise((resolve, reject) => {
            resolve('第二次成功')
            //這個地方我們又拿到成功的需要再去.then拿到這次成功的結果
        })
    }, err => {
        //我們可能每一次失敗都要進行不同的處理,就可以給每一個.then加上錯誤處理
        console.log('第一次失敗' + err)
        throw new Error('報錯') //報錯了下面的代碼就不執(zhí)行了
    }).then(res => {
        console.log('第二次成功拿到結果:' + res)
    }, err => {
        console.log('第二次失敗' + err)
    }).catch(err => {
        console.log(err) //這里的err 就是是失敗
    })
    //pending 等待狀態(tài)
</script>

2.Async/await

這個是基于Promise進行優(yōu)化的,因為Promise雖然解決了回調(diào)地獄但是其是鏈式調(diào)用,會寫起來很長也不是很方便后期維護,Async/await就是Promise的升級版。

<script>
    //Async/await
    //步驟1:準備一個返回promise對象的函數(shù)
    function asyncTask(){
        return new Promise((resolve,reject)=>{
            let isSuccess=true
            if(isSuccess){
                resolve('任務3的成功處理結果')
            }else{
                reject('任務3的失敗處理結果')
            }
        })
    }
    async function main(){
        console.log('任務1')
        const pr1=await asyncTask()
        //這里只等待了一個如果還有繼續(xù)寫
        //const pr2=await asyncTask2()
        console.log(pr1);
        console.log('任務2');
    }
    main()
</script>

3.Proxy對象代理

這個就是表面意思,使用一個對象去代替另一個對象進行一些操作,主要用于框架的封裝比如VUE3,vue2中用的就是Object.defineProperty()也是數(shù)據(jù)渲染的底層。
舉例說吧,我們有一個數(shù)據(jù)存儲在對象中,我們想把這個數(shù)據(jù)渲染到頁面很簡單,但是我們需要做到當修改數(shù)據(jù)的時候頁面中顯示也跟著改變,聽起來是不是很熟悉沒錯就是vue中的雙向綁定數(shù)據(jù)的原理。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="container"></div>
</body>
<script>
    //編寫一個對象,把對象的屬性顯示到頁面上,再進行對對象的屬性修改時頁面跟隨變化
    const obj = {
        name: '一號',
        age: 18
    }
    const container = document.getElementById('container');
    // console.log(container);
    // textContent和innerHTML類似
    //我們現(xiàn)在對obj.name修改發(fā)現(xiàn)修改后頁面并不變化需要從新渲染
    //obj.name = '二號'; //雖然數(shù)據(jù)變了,但是頁面沒有變化需要從新渲染
    //container.textContent=obj.name; //從新渲染才可以
    //第二種 使用代理Proxy
    //我們使用代理就可以解決這個問題
    //兩個參數(shù) 第一個 代理的哪一個對象,第二個一個對象包含函數(shù)
    const p1 = new Proxy(obj, {
        get(target, property, receiver) {
            // 數(shù)據(jù)對象 屬性名   Proxy實例
            //獲取的時候
            //obj[property] 就是獲取對象中的所有屬性
            return obj[property]
        },
        set(target, property, value, receiver) {
            // 數(shù)據(jù)對象 屬性名  修改的值 Proxy實例
            //修改的時候
            obj[property] = value
            container.textContent = obj.name;
        }
    })
    console.log(p1.name);
    p1.name='三號'
</script>

</html>

上面的代碼就是舉得例子,以前自己也不懂雙向數(shù)據(jù)的原理(只會背八股文不知道底層怎么實現(xiàn)的),現(xiàn)在看到proxy恍然大悟。

總結

代碼千千萬,適合自己最重要。歡迎大家評論指出錯誤和不足。文章來源地址http://www.zghlxwxcb.cn/news/detail-521414.html

到了這里,關于ES6中Promise、Async/await解決回調(diào)地獄、Proxy代理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • ES6-2:Iterator、Proxy、Promise、生成器函數(shù)...

    ES6-2:Iterator、Proxy、Promise、生成器函數(shù)...

    打印出的是里面的內(nèi)容,如果是for in打印出來的是索引,of不能遍歷對象 Symbol.iterator是js內(nèi)置的,可以訪問直接對象arr[Symbol.iterator],()調(diào)用 對象非線性一般不能迭代 后兩個是偽數(shù)組,但是是真迭代器接口 類似于數(shù)組,但成員的值都是唯一的,沒有重復 與數(shù)組不同的是set沒有

    2024年04月11日
    瀏覽(27)
  • 記錄--沒有await,如何處理“回調(diào)地獄”

    記錄--沒有await,如何處理“回調(diào)地獄”

    不要嵌套使用函數(shù)。給每個函數(shù)命名并把他們放在你代碼的頂層 利用函數(shù)提升。先使用后聲明。 處理每一個異常 編寫可以復用的函數(shù),并把他們封裝成一個模塊 異步Javascript代碼,或者說使用callback的Javascript代碼,很難符合我們的直觀理解。很多代碼最終會寫成這樣: 看到

    2024年02月04日
    瀏覽(18)
  • Promise、Async/Await 詳解

    ? ? ? ? Promise是抽象異步處理對象以及對其進行各種操作的組件。Promise本身是同步的立即執(zhí)行函數(shù)解決異步回調(diào)的問題, 當調(diào)用 resolve 或 reject 回調(diào)函數(shù)進行處理的時候, 是異步操作, 會先執(zhí)行.then/catch等,當主棧完成后,才會去調(diào)用執(zhí)行resolve/reject中存放的方法。 ? ? ?

    2024年02月14日
    瀏覽(32)
  • promise及異步編程async await

    promise及異步編程async await

    ECMAScript 6 新增了正式的 Promise(期約)引用類型,支持優(yōu)雅地定義和組織異步邏輯。接下來幾個版本增加了使用 async 和 await 定義異步函數(shù)的機制 JavaScript 是單線程事件循環(huán)模型。異步行為是為了優(yōu)化因計算量大而時間長的操作,只要你不想為等待某個異步操作而阻塞

    2024年02月04日
    瀏覽(24)
  • async/await實現(xiàn)Promise.all()

    ??個人主頁: 不叫貓先生 ???♂?作者簡介:專注于前端領域各種技術,熱衷分享,期待你的關注。 ??系列專欄:vue3從入門到精通 ??個人簽名:不破不立 Promise.all() 方法接收一個 promise 的 iterable 類型(注:Array,Map,Set 都屬于 ES6 的 iterable 類型)的輸入,并且 只返回

    2024年01月18日
    瀏覽(44)
  • 徹底理解Promise和async/await

    1.異步行為是 為了優(yōu)化因計算量大而時間長的操作 . 2.pedding 待定: 表示尚未開始或正在進行中 ? ?fulfilled 解決: 表示已經(jīng)成功完成 ? ?rejected 拒絕: 表示沒有完成 3.從pedding狀態(tài)切換到fulfilled狀態(tài)或rejected狀態(tài)后,狀態(tài)就不會再改變.而且也不能保證promise比如會脫離待定狀態(tài). 因此

    2024年02月03日
    瀏覽(27)
  • Promise, Generator, async/await的漸進理解

    ???? 作為前端開發(fā)者的伙伴們,肯定對Promise,Generator,async/await非常熟悉不過了。Promise絕對是爛記于心,而async/await卻讓使大伙們感覺到爽(原來異步可以這么簡單)。可回頭來梳理他們的關聯(lián)時,你驚訝的發(fā)現(xiàn),他們是如此的密切相關。 ????? 我對他們?nèi)咧g的關聯(lián)

    2024年02月08日
    瀏覽(29)
  • 消滅異步回調(diào),還得是 async-await

    關于異步處理問題,ES5的回調(diào)讓我們陷入回調(diào)地獄輪回,后來ES6的Promise(Promise不了解?點這了解[1])讓我們脫離輪回,終于,ES7的async-await帶我們走向光明。今天我們就來學習一夏 async-await,看看與Promise有何聯(lián)系和區(qū)別。 一、走進Async-await原理 1、原理1 async函數(shù)返回一個

    2024年02月10日
    瀏覽(24)
  • 前端面試:【異步編程】Callback、Promise和Async/Await

    嗨,親愛的JavaScript探險家!在JavaScript開發(fā)的旅程中,你會經(jīng)常遇到異步編程的需求。為了處理異步操作,JavaScript提供了多種機制,包括Callbacks、Promises和Async/Await。本文將深入介紹這些機制,讓你能夠更好地處理異步任務。 1. Callbacks:傳統(tǒng)的異步方式 Callbacks是JavaScript中最早

    2024年02月11日
    瀏覽(99)
  • 前端異步編程全套:xmlhttprequest > ajax > promise > async/await

    同步與異步區(qū)別 同步:按順序,依次執(zhí)行,向服務器發(fā)送請求--客戶端做其他操作 異步:分別執(zhí)行,向服務器發(fā)送請求==同時執(zhí)行其他操作 原生xmlhttprequest 四步驟 創(chuàng)建ajax對象 設定數(shù)據(jù)的傳輸方式(get、post),打開連接open() 獲得響應數(shù)據(jù) 屬性 描述 onreadystatechange 當readysta

    2024年02月01日
    瀏覽(105)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包