国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
一、promise函數(shù)是干什么的
二、Promise三種狀態(tài)
三、實現(xiàn)
1,then和catch
2.確定狀態(tài)
3.async和await
四.promise方法
1.all方法
2.race方法
五.promise封裝ajax案例
首頁 web前端 前端問答 promise是es6的嗎

promise是es6的嗎

Nov 03, 2022 pm 07:20 PM
es6 promise

是的。promise是ECMAScript 6新增的引用類型,表示一個異步操作的最終完成或者失敗。promise是解決異步編程調(diào)用代碼邏輯編寫過于復雜的問題的,當網(wǎng)絡(luò)請求非常復雜時,就會出現(xiàn)回調(diào)地獄,這樣如果將這些代碼寫在一起就會看起來很復雜,且不利于閱讀,如果用promise的話就會讓代碼看起來更加美觀優(yōu)雅。

promise是es6的嗎

本教程操作環(huán)境:windows7系統(tǒng)、ECMAScript 6版、Dell G3電腦。

ECMAScript 6 增加了對?Promises/A+?規(guī)范的完善支持,即?Promise?類型。一經(jīng)推出,Promise?就大受歡迎,成為了主導性的異步編程機制。所有現(xiàn)代瀏覽器都支持 ES6 期約,很多其他瀏覽器 API 也以期約為基礎(chǔ)。

Promise?是 ECMAScript 6 新增的引用類型,表示一個異步操作的最終完成或者失敗。

一、promise函數(shù)是干什么的

promise函數(shù)是解決異步編程調(diào)用代碼邏輯編寫過于復雜的問題的,當網(wǎng)絡(luò)請求非常復雜時,就會出現(xiàn)回調(diào)地獄,這樣如果將這些代碼寫在一起就會看起來很復雜,且不利于閱讀,如果用promise的話就會讓代碼看起來更加美觀優(yōu)雅

二、Promise三種狀態(tài)

首先, 當我們開發(fā)中有異步操作時, 就可以給異步操作包裝一個Promise
異步操作之后會有三種狀態(tài)

pending:等待狀態(tài),比如正在進行網(wǎng)絡(luò)請求,或者定時器沒有到時間。
fulfill:滿足狀態(tài),當我們主動回調(diào)了resolve時,就處于該狀態(tài),并且會回調(diào).then()
reject:拒絕狀態(tài),當我們主動回調(diào)了reject時,就處于該狀態(tài),并且會回調(diào).catch()

三、實現(xiàn)

1,then和catch

1.出于未決狀態(tài)的函數(shù)是同步的 會立即執(zhí)行
2.then和catch是異步的 就算promise對象里面沒有異步操作 讓then方法或者catch立即執(zhí)行 那么 這里兩個方法或被加入到事件隊列中等待執(zhí)行

//參數(shù) 函數(shù)(resolve,reject)
    new Promise((resolve, reject) => {
        setTimeout(() => {
            //請求成功的時候調(diào)用resolve
            resolve('22222')
            //請求失敗的時候調(diào)用reject
            reject('error message')
        }, 1000)
    }).then((data) => { //請求成功處理函數(shù)
        console.log(data)
    }).catch((err) => { //請求失敗處理函數(shù)
        console.log(err)
    })

2.確定狀態(tài)

1、在未決狀態(tài)的處理函數(shù)中 如果發(fā)生未捕獲的錯誤呀 那么狀態(tài)就會有pending 直接變成 rejected狀態(tài) 并且可以被catach捕獲

var pro = new Promise((resolve, reject) => {
            throw new Error("123");

            // try{
            //     throw new Error("123"); 
            // } catch(e) {}

            resolve(12);
            reject(34);
        })

        // pro.then(data => {
        //     console.log(data);
        // }, err => {
        //     console.log(err);
        // })


        console.log(pro);
        

        pro.then(data => {
            console.log(data);
            
        })

        pro.catch(data => {
            console.log(data);
            
        })

3.async和await

1.使用Promise:

const makeRequest = () =>
        getJSON().then(data => {
            console.log(data)
            return "done"
        })

    makeRequest()

2.使用Async:

async和await 是ES7提出來的
async作用:簡化函數(shù)返回值中promise對象的創(chuàng)建
一般情況下, async寫在函數(shù)的最前面,被修飾的函數(shù)的返回值 ,一定是promise對象。只有在某些特殊情況下 才會手動返回一個promise對象。

作用:和promise一樣 解決異步問題 但是他的好處在于 讓異步代碼和同步的一樣!!
注意點 : 同步方法我們拿到結(jié)果 是通過返回值,異步方法拿到結(jié)果,是靠回調(diào)函數(shù)。

async 和await使用的基本語法 :

  • 就是在普通函數(shù)前面加一個async 調(diào)用跟普通函數(shù)一樣

  • async出現(xiàn)使用 一般都要和await配合使用

  • await后面接的就是一個promise對象 await一定是在異步函數(shù)中使用的

const makeRequest = async () => {
 // await getJSON()表示console.log會等到getJSON的promise成功reosolve之后再執(zhí)行。
        console.log(await getJSON)
        return "done"
    }

    makeRequest()

3.區(qū)別

1.函數(shù)前面多了一個aync關(guān)鍵字。await關(guān)鍵字只能用在aync定義的函數(shù)內(nèi)。async函數(shù)會隱式地返回一個promise,該promise的reosolve值就是函數(shù)return的值。(示例中reosolve值就是字符串”done”)
2.我們不能在最外層代碼中使用await,因為不在async函數(shù)內(nèi)。

四.promise方法

var r1 = new Promise((resolve,reject) => {
            setTimeout(function(){
                resolve("我是第一個請求");
            },1000)
        })
        var r2 = new Promise((resolve,reject) => {
            setTimeout(function(){
                resolve("我是第二個請求");
            },3000)
        })
        var r3 = new Promise((resolve,reject) => {
            setTimeout(function(){
                resolve("我是第三個請求");
            },4000)
        })
        var r4 = new Promise((resolve,reject) => {
            setTimeout(function(){
                resolve("我是第四個請求");
            },500)
        })

1.all方法

有時候我們需要等待兩個或者多個請求都成功返回了再進行下一步操作,promise 的all方法是等所有的異步請求完成之后在進行下一步回調(diào)

Promise.all([r1,r2,r3,r4]).then(data => {
            console.log(data);
            
        })

2.race方法

請求同時發(fā)送出去 誰先回來 就是用誰的數(shù)據(jù)。

Promise.race([r1,r2,r3,r4]).then(data => {
           console.log(data);
           
       })

五.promise封裝ajax案例

<script>
       function toData(obj) {
               
               // 聲明一個數(shù)組 來裝每一組的數(shù)據(jù)
               var arr = [];
               if(obj !== null) {
                   for(var key in obj) {
                       let str = key + "=" + obj[key];
                       arr.push(str);
                   }
                   return arr.join("&");
               }
       }

       function ajax(obj) {
           return new Promise(function(resolve, reject) {
               // 給ajax所需要的參數(shù)設(shè)置默認值
               obj.type = obj.type || "get";
               obj.async = obj.async|| "true";
               obj.dataType = obj.dataType || "json";
               obj.data = obj.data || null;

               // 開始發(fā)送ajax請求
               var xhr;

               if(window.XMLHttpRequest) {
                   xhr = new XMLHttpRequest();
               } else {
                   // IE低版本的瀏覽器
                   xhr = new ActiveXObject("Microsoft.XMLHttp");
               }

               // 判斷是post請求 還是get請求
               if(obj.type === "post") {
                   xhr.open(obj.type, obj.url, obj.async);
                   // 設(shè)置請求頭
                   xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

                   xhr.send(toData(obj.data));

               } else {
                   var url = obj.url + "?" + toData(obj.data);
                   xhr.open(obj.type, url, obj.async);
                   xhr.send();
               }

               // 處理響應(yīng)體
               xhr.onreadystatechange = function() {

                   if(xhr.readyState == 4) {
                       if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
                           resolve(JSON.parse(xhr.responseText));

                       } else {
                           reject(xhr.status);
                       }
                   }
               }
           })
       }

       ajax({
           url : "./data.php",
           data : {
               name : "jack",
               age : 16
           }
       }).then(res => {
           console.log(res);
           
       }, err => {
           console.log(err);
           
       })
   
   </script>

【相關(guān)推薦:javascript視頻教程web前端

以上是promise是es6的嗎的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應(yīng)法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
在Vue應(yīng)用中遇到Uncaught (in promise) TypeError怎么辦? 在Vue應(yīng)用中遇到Uncaught (in promise) TypeError怎么辦? Jun 25, 2023 pm 06:39 PM

Vue是一款流行的前端框架,在開發(fā)應(yīng)用時經(jīng)常會遇到各種各樣的錯誤和問題。其中,Uncaught(inpromise)TypeError是常見的一種錯誤類型。在本篇文章中,我們將探討它的產(chǎn)生原因和解決方法。什么是Uncaught(inpromise)TypeError?Uncaught(inpromise)TypeError錯誤通常出現(xiàn)在

async是es6還是es7的 async是es6還是es7的 Jan 29, 2023 pm 05:36 PM

async是es7的。async和await是ES7中新增內(nèi)容,是對于異步操作的解決方案;async/await可以說是co模塊和生成器函數(shù)的語法糖,用更加清晰的語義解決js異步代碼。async顧名思義是“異步”的意思,async用于聲明一個函數(shù)是異步的;async和await有一個嚴格規(guī)定,兩者都離不開對方,且await只能寫在async函數(shù)中。

小程序為什么要將es6轉(zhuǎn)es5 小程序為什么要將es6轉(zhuǎn)es5 Nov 21, 2022 pm 06:15 PM

為了瀏覽器兼容。ES6作為JS的新規(guī)范,加入了很多新的語法和API,但現(xiàn)代瀏覽器對ES6新特性支持度不高,所以需將ES6代碼轉(zhuǎn)為ES5代碼。在微信web開發(fā)者工具中,會默認使用babel將開發(fā)者ES6語法代碼轉(zhuǎn)換為三端都能很好支持的ES5的代碼,幫助開發(fā)者解決環(huán)境不同所帶來的開發(fā)問題;只需要在項目中配置勾選好“ES6轉(zhuǎn)ES5”選項即可。

言出必行:兌現(xiàn)承諾的好處和壞處 言出必行:兌現(xiàn)承諾的好處和壞處 Feb 18, 2024 pm 08:06 PM

在日常生活中,我們常常會遇到承諾與兌現(xiàn)之間的問題。無論是在個人關(guān)系中,還是在商業(yè)交易中,承諾的兌現(xiàn)都是建立信任的關(guān)鍵。然而,承諾的利與弊也常常會引起爭議。本文將探討承諾的利與弊,并給出一些建議,如何做到言出必行。承諾的利是顯而易見的。首先,承諾可以建立信任。當一個人信守承諾時,他會讓別人相信自己是一個可信賴的人。信任是人與人之間建立起的紐帶,它可以讓人們更加

es5和es6怎么實現(xiàn)數(shù)組去重 es5和es6怎么實現(xiàn)數(shù)組去重 Jan 16, 2023 pm 05:09 PM

es5中可以利用for語句和indexOf()函數(shù)來實現(xiàn)數(shù)組去重,語法“for(i=0;i

深入了解Promise.resolve() 深入了解Promise.resolve() Feb 18, 2024 pm 07:13 PM

Promise.resolve()詳解,需要具體代碼示例Promise是JavaScript中一種用于處理異步操作的機制。在實際開發(fā)中,經(jīng)常需要處理一些需要按順序執(zhí)行的異步任務(wù),而Promise.resolve()方法就是用來返回一個已經(jīng)Fulfilled狀態(tài)的Promise對象。Promise.resolve()是Promise類的一個靜態(tài)方法,它接受一個

es6暫時性死區(qū)是什么意思 es6暫時性死區(qū)是什么意思 Jan 03, 2023 pm 03:56 PM

在es6中,暫時性死區(qū)是一個語法錯誤,是指let和const命令使區(qū)塊形成封閉的作用域。在代碼塊內(nèi),使用let/const命令聲明變量之前,該變量都是不可用的,在變量聲明之前屬于該變量的“死區(qū)”;這在語法上,稱為“暫時性死區(qū)”。ES6規(guī)定暫時性死區(qū)和let、const語句不出現(xiàn)變量提升,主要是為了減少運行時錯誤,防止在變量聲明前就使用這個變量,從而導致意料之外的行為。

es6怎么判斷數(shù)組里總共有多少項 es6怎么判斷數(shù)組里總共有多少項 Jan 18, 2023 pm 07:22 PM

在es6中,可以利用array對象的length屬性來判斷數(shù)組里總共有多少項,即獲取數(shù)組中元素的個數(shù);該屬性可返回數(shù)組中元素的數(shù)目,只需要使用“array.length”語句即可返回表示數(shù)組對象的元素個數(shù)的數(shù)值,也就是長度值。

See all articles