成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

es6基礎(chǔ)0x023:Promise

Snailclimb / 2481人閱讀

摘要:同時(shí)接受一個(gè)變量,稱之為栗子當(dāng)調(diào)用之后,執(zhí)行了,此時(shí)的變成了,同時(shí),回調(diào)接受一個(gè),作為操作失敗的原因說明語(yǔ)法回調(diào)栗子注意在異中的錯(cuò)誤不會(huì)執(zhí)行注意之后會(huì)被忽略不會(huì)輸出語(yǔ)法回調(diào)栗子

0x000 概述

Promise是一個(gè)異步編程的解決方案,他經(jīng)常和ajax一起出現(xiàn),導(dǎo)致很多人以為Promise是一種新的網(wǎng)絡(luò)請(qǐng)求技術(shù),其實(shí)不然。Promise是一種思考方式、編程方式。

0x000 栗子

先寫一個(gè)栗子

setTimeout(()=>{
    console.log("here")
},3000)

很簡(jiǎn)單,3s之后將會(huì)打印出here,現(xiàn)在換成Promise

new Promise((resolve, reject)=>{
    setTimeout(()=>{
        resolve()
    }, 3000)
}).then(()=>{
    console.log("here")
})

執(zhí)行結(jié)果也是一樣,3s之后將會(huì)輸出here,還可以這么寫

let proxy=new Promise((resolve, reject)=>{
    setTimeout(()=>{
        resolve()
    }, 3000)
})

setTimeout(()=>{
    proxy.then(()=>{
        console.log("here")
    })
}, 10000)

13s后才輸出here

0x002 初始化

語(yǔ)法

new Promise(executor)

參數(shù):

executor:處理器函數(shù),函數(shù)的完整簽名是(resolve, reject)=>{}

返回值:一個(gè)Promise實(shí)例

栗子

let promise=new Promise((resolve, reject)=>{
    setTimeout(()=>{
        resolve()
    }, 3000)
})
console.log(promise) // Promise?{}

說明:
使用new Promise實(shí)例化一個(gè)Promise之后,將它輸出出來,可以看到他有一個(gè)pending,這是說明這個(gè)promise的狀態(tài),稱為PromiseStatuspromise一共有3種狀態(tài),一個(gè)promise必定處于下面三個(gè)狀態(tài)之一:

pending:初始狀態(tài)

fulfilled:操作成功

rejected:操作失敗

0x003 then

語(yǔ)法:

promise.then(onFulfilled, onRejected)

onFulfilled:操作成功的回調(diào)

onRejected:操作失敗的回調(diào)

栗子1:

let promise=new Promise((resolve, reject)=>{
    setTimeout(()=>{
        resolve()
    }, 3000)
})
console.log(promise) // Promise?{}
promise.then(()=>{
    console.log(promise) // Promise?{: undefined}
})

說明1:
當(dāng)調(diào)用resolve之后,then函數(shù)執(zhí)行了,同時(shí)promisePromiseStatus變成了resolved。onFulfilled同時(shí)接受一個(gè)變量,稱之為PromiseValue

let promise=new Promise((resolve, reject)=>{
    setTimeout(()=>{
        resolve(1)
    }, 3000)
})
promise.then((value)=>{
    console.log(value) // 1
})

栗子2:

let promise=new Promise((resolve, reject)=>{
    setTimeout(()=>{
        reject()
    }, 3000)
})
console.log(promise) // Promise?{}
promise.then(()=>{},()=>{
    console.log(promise) // Promise?{: undefined}
})

當(dāng)調(diào)用reject之后,then執(zhí)行了,此時(shí)promisePromiseStatus變成了rejected,同時(shí),onRejected回調(diào)接受一個(gè)reason,作為操作失敗的原因說明:

let promise=new Promise((resolve, reject)=>{
    setTimeout(()=>{
        reject("nothing")
    }, 3000)
})
promise.then(()=>{},(reason)=>{
    console.log(reason) // nothing
})

0x004 catch

語(yǔ)法:

promise.catch(onRejected)

onRejected:回調(diào)

栗子:

let promise=new Promise((resolve, reject)=>{
    setTimeout(()=>{
        resolve()
    }, 3000)
}).then(()=>{
    throw "error"
}).catch((e)=>{
    console.log(`i catch you: ${e}`) // i catch you error 
})

注意1:在異中的錯(cuò)誤不會(huì)執(zhí)行catch

let promise=new Promise((resolve, reject)=>{
    setTimeout(()=>{
        throw "error"
    }, 3000)
}).catch((e)=>{
    console.log(`i catch you: ${e}`) // Uncaught error 
})

注意2:resolve之后會(huì)被忽略

 let promise=new Promise((resolve, reject)=>{
    resolve()
    throw "error"
}).catch((e)=>{
    console.log(`i catch you: ${e}`)  // 不會(huì)輸出
}) 

0x005 finally

語(yǔ)法:

p.finally(onFinally)

onFainally:回調(diào)

栗子:

let promise=new Promise((resolve, reject)=>{
    setTimeout(()=>{
        resolve()
    }, 3000)
}).then(()=>{
    console.log("resolve")
    throw "error"
}).catch((e)=>{
    console.log(`i catch you: ${e}`)
}).finally(()=>{
    console.log("finally")
})
// resolve
// i catch you error
// finally

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/108768.html

相關(guān)文章

  • ES6-7

    摘要:的翻譯文檔由的維護(hù)很多人說,阮老師已經(jīng)有一本關(guān)于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書的目的是以目前還在制定中的ECMASc...

    mudiyouyou 評(píng)論0 收藏0
  • 【前端】ES6入門基礎(chǔ)知識(shí)

    摘要:關(guān)于的入門了解新增模板字符串為提供了簡(jiǎn)單的字符串插值功能箭頭函數(shù)操作符左邊為輸入的參數(shù),而右邊則是進(jìn)行的操作以及返回的值。將對(duì)象納入規(guī)范,提供了原生的對(duì)象。增加了和命令,用來聲明變量。 關(guān)于ES6的入門了解 新增模板字符串(為JavaScript提供了簡(jiǎn)單的字符串插值功能)、箭頭函數(shù)(操作符左邊為輸入的參數(shù),而右邊則是進(jìn)行的操作以及返回的值Inputs=>outputs。)、for-o...

    philadelphia 評(píng)論0 收藏0
  • JavaScript 異步

    摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。寫一個(gè)符合規(guī)范并可配合使用的寫一個(gè)符合規(guī)范并可配合使用的理解的工作原理采用回調(diào)函數(shù)來處理異步編程。 JavaScript怎么使用循環(huán)代替(異步)遞歸 問題描述 在開發(fā)過程中,遇到一個(gè)需求:在系統(tǒng)初始化時(shí)通過http獲取一個(gè)第三方服務(wù)器端的列表,第三方服務(wù)器提供了一個(gè)接口,可通過...

    tuniutech 評(píng)論0 收藏0
  • ES6基礎(chǔ)知識(shí)(三)

    摘要:會(huì)觸發(fā)方法第一個(gè)回調(diào)會(huì)觸發(fā)方法第二個(gè)回調(diào)或方法成功操作失敗操作會(huì)終止的執(zhí)行需要方法觸發(fā)向下執(zhí)行執(zhí)行結(jié)果實(shí)現(xiàn)的參數(shù)是一個(gè)函數(shù)有和兩個(gè)參數(shù)回調(diào)函數(shù)中會(huì)指向需要保存才會(huì)指向?qū)嵗龑?duì)象三種狀態(tài)分別為狀態(tài)只能從變成或者成功回調(diào)方法集合失敗回調(diào)方法集合觸 promise // resolve()會(huì)觸發(fā)then方法第一個(gè)回調(diào), reject()會(huì)觸發(fā)then方法第二個(gè)回調(diào)或catch方法 let p ...

    lieeps 評(píng)論0 收藏0
  • JS筆記

    摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。異步編程入門的全稱是前端經(jīng)典面試題從輸入到頁(yè)面加載發(fā)生了什么這是一篇開發(fā)的科普類文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...

    rottengeek 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<