欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ES6中的Promise對象與async和await方法詳解

 更新時間:2022年12月29日 15:44:36   作者:簡單長庚  
Promise是es6引入的異步編程薪解決方案,語法上promise就是一個構(gòu)造函數(shù),用來封裝異步操作病可以獲取其成功或失敗的結(jié)果,這篇文章主要介紹了ES6中的Promise對象與async和await方法,需要的朋友可以參考下

promise存在的意義:解決異步回調(diào)地獄問題
三種狀態(tài):pending(進行中)、fulfilled(已成功)、reject(已失?。?/p>

Promise是es6引入的異步編程薪解決方案,語法上promise就是一個構(gòu)造函數(shù),用來封裝異步操作病可以獲取其成功或失敗的結(jié)果。

Promise構(gòu)建出來的實例存在以下方法: then() 是實例狀態(tài)發(fā)生改變時的回調(diào)函數(shù),第一個參數(shù)是resolved狀態(tài)的回調(diào)函數(shù),第二個參數(shù)是rejected狀態(tài)的回調(diào)函數(shù) catch() 用于指定發(fā)生錯誤時的回調(diào)函數(shù) finally() 用于指定不管 Promise 對象最后狀態(tài)如何,都會執(zhí)行的操作

1)promise構(gòu)造函數(shù):promise(excutor){}

2)promise.protiotype.then方法

3)promise.prototype.catch方法

<script>
 //如何接收回調(diào)地域
        function aaa() {
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve(1);
                    console.log("執(zhí)行了aaa");
                }, 2000)
            })
        }
        function bbb() {
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve(2);
                    console.log("bbb");
                }, 3000)
            })
        }
        function ccc() {
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve(3);
                    console.log("ccc");
                }, 3000)
            })
        }

        function fn1() {
            var sum = 0;
            aaa().then((res) => {//返回promise對象
                sum = sum + res;
                return bbb();
            }).then((res) => {
                sum = sum + res;
                return ccc();
            }).then((res) => {
                sum = sum + res;
                console.log("sum", sum);
                // return sum
            })
        }
        // fn1();

        //promise對象,用于處理多個異步,(傳入的參數(shù)是一個數(shù)組),在所有異步都執(zhí)行完畢才會觸發(fā),都成功才觸發(fā)
        //比如一個頁面上需要等待多個ajax請求,然后才正常顯示頁面
        //只要有一個失敗則為失敗
        let a = new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(3);
                console.log("a");
            }, 3000)
        })
        let b = new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(6);
                console.log("b");
            }, 3000)
        })
        // Promise.all([a, b]).then((result) => {
        //     console.log("result", result);
        // }).catch((err) => {
        //     console.log("err", err);
        // });

        //Promise.race 執(zhí)行時間快執(zhí)行,那個promise執(zhí)行的快,就選哪個
        //不管結(jié)果本身,是成功狀態(tài)還是失敗狀態(tài),只看執(zhí)行時間
        Promise.race([a, b]).then((res) => {
            console.log("成功了", res);
        }).catch(err => {
            console.log("err", err);
        })
</script>

promise的兩個方法all和race見上述

Promise封裝的ajax

 <script>
        const p = new Promise((resolve, reject) => {
            //1.創(chuàng)建對象
            const xhr = new XMLHttpRequest();
            //2.初始化
            xhr.open("get", "");
            //3.發(fā)送
            xhr.send();
            //4.綁定事件,處理響應(yīng)結(jié)果
            xhr.onreadystatechange = function () {
                //判斷
                if (xhr.readyState == 4) {
                    //判斷響應(yīng)狀態(tài)碼200-299
                    if (xhr.status >= 200 && xhr.status < 300) {
                        //表示成功
                        resolve(XHR.response);
                    } else {
                        //如果失敗
                        reject(xhr.status)
                    }
                }
            }
        })

        //指定回調(diào)
        p.then(function (value) {
            console.log(value);
        }, function (reason) {
            console.log(reason);
        })
    </script>

async和await方法

async 是es7才有的一個關(guān)鍵字,和promise對象有很大的關(guān)聯(lián)

async 標識的函數(shù),必定返回promise對象

await 關(guān)鍵字 只能放在 async標識的函數(shù)中

作用就是等待獲取promise返回的內(nèi)容,也就是resolve和reject的值

<script>
 		//async 返回的是一個promise對象
        // async function fn() {
        //     // return "123"
        //     //如果返回的不是一個promise對象,則返回的就是一個成功的promise對象
        //     //拋出錯誤 返回的是一個失敗的promise對象
        //     // throw new Error('出錯了!')
        //     //返回的結(jié)果是一個promise對象
        //     return new Promise((resolve, reject) => {
        //         resolve('成功的數(shù)據(jù)');//返回的也是promise成功的值
        //         // reject("失敗的內(nèi)容");//返回的也是失敗的neirong
        //     })
        // }
        // const result = fn();
        // result.then(value => {
        //     console.log(value);
        // }, reason => {
        //     console.warn(reason)
        // })
        // console.log(result);

    
        //await 表達式
        //1.await必須寫在async函數(shù)中  2.await右側(cè)的表達式一般為promise對象
        //3.await 返回的是promise成功的值 4.await的promise失敗了,就會拋出異常,需要通過try...catch捕獲處理
        const p = new Promise((resolve, reject) => {
            // resolve("成功的值!");
            reject('失敗啦!');
        })
        //await要放在async函數(shù)中
        async function main() {
            try {
                let result = await p;
                console.log(result);
            } catch (e) {
                console.log(e);
            }

        }
        //調(diào)用函數(shù)
        main();
</script>

到此這篇關(guān)于ES6中的Promise對象與async和await方法詳解的文章就介紹到這了,更多相關(guān)Promise對象與async和await方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 微信小程序位置授權(quán)處理方法

    微信小程序位置授權(quán)處理方法

    這篇文章主要給大家介紹了關(guān)于微信小程序位置授權(quán)處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用小程序具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 基于html+css+js實現(xiàn)簡易計算器代碼實例

    基于html+css+js實現(xiàn)簡易計算器代碼實例

    這篇文章主要介紹了基于html+css+js實現(xiàn)簡易計算器代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • JavaScript函數(shù)式編程實現(xiàn)介紹

    JavaScript函數(shù)式編程實現(xiàn)介紹

    函數(shù)式編程是一種編程范式,將整個程序都由函數(shù)調(diào)用以及函數(shù)組合構(gòu)成。 可以看成一條流水線,數(shù)據(jù)可以不斷地從一個函數(shù)的輸出流入另一個函數(shù)的輸入,最后輸出結(jié)果
    2022-09-09
  • JavaScript 不支持 indexof 該如何解決

    JavaScript 不支持 indexof 該如何解決

    indexOf() 方法可返回某個指定的字符串值在字符串中首次出現(xiàn)的位置。本文給大家介紹ie8 不支持 indexof 的解決方法
    2016-03-03
  • Webpack完整打包流程實現(xiàn)

    Webpack完整打包流程實現(xiàn)

    Webpack是當(dāng)下流行的JavaScript靜態(tài)模塊打包器,它能夠處理應(yīng)用中的所有資源文件,并將其打包成瀏覽器兼容的文件,本文就來介紹一下Webpack完整打包流程實現(xiàn),感興趣的可以了解一下
    2024-09-09
  • Next.js應(yīng)用轉(zhuǎn)換為TypeScript方法demo

    Next.js應(yīng)用轉(zhuǎn)換為TypeScript方法demo

    這篇文章主要為大家介紹了Next.js應(yīng)用轉(zhuǎn)換為TypeScript方法demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • js實現(xiàn)多個標題吸頂效果

    js實現(xiàn)多個標題吸頂效果

    這篇文章主要為大家詳細介紹了js實現(xiàn)多個標題吸頂效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • JavaScript 實現(xiàn)鍋拍灰太狼小游戲

    JavaScript 實現(xiàn)鍋拍灰太狼小游戲

    這篇文章主要介紹了JavaScript 實現(xiàn)鍋拍灰太狼小游戲,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • javascript 漢字與拼音轉(zhuǎn)換

    javascript 漢字與拼音轉(zhuǎn)換

    javascript 漢字與拼音轉(zhuǎn)換...
    2007-02-02
  • layer彈出層倒計時關(guān)閉的實現(xiàn)方法

    layer彈出層倒計時關(guān)閉的實現(xiàn)方法

    今天小編就為大家分享一篇layer彈出層倒計時關(guān)閉的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09

最新評論