Promise/async、await幫我們解決了什么
它給我們提供了一種新的異步編程解決方案,同時避免了困擾已久的回調(diào)地獄
// 異步的處理可能會產(chǎn)生這樣的回調(diào)地獄(第二個異步操作和第一個異步的結(jié)果有關(guān)系) let Ajax = function(data, success, error){ $.ajax({ data: data, success: function(res){ success(res) }, error: function(err){ error(err) } }) } Ajax(data,function(res){ Ajax(data,function(res){ // 繼續(xù)循環(huán)回調(diào) },function(err){}) },function(err){}) // 看看promise的處理方式 let promise = function (data) { return new Promise((resolve,reject) => { $.ajax({ data: data, success: function(res){ resolve(res) }, error: function(err){ reject(err) } }) }) } let data = {} // ajax請求參數(shù) promise(data).then((res) => {return promise(res)}).catch(err => console.log(err)).then(res => console.log(res)) // async 、await的處理方式使得異步操作更方便 (async function(){ let res = await promise(data) let resp = await promise(res) console.log(resp) })()Promise的方法總結(jié) Promise.prototype.then() Promise.prototype.catch() Promise.prototype.finally() Promise.all()
# 當(dāng)存在多個沒有相關(guān)性的異步操作時想一次性得到所有結(jié)果,可以使用promise.all() Promise.all([p1,p2,p3]) 只有當(dāng)所有異步操作狀態(tài)變?yōu)閞esolve的時候 返回所有值得數(shù)組 當(dāng)有一個返回reject的時候 返回值為第一個reject的值Promise.race()
# 當(dāng)存在多個沒有相關(guān)性的異步操作時,想要獲得返回速度最快的異步操作采用 Promise.race([p1,p2,p3]) 該方法返回第一個有返回值的異步操作的返回值(resolve或者reject) Promise.race([new Promise((resolve, reject) => { console.log("init p1") setTimeout(()=>{ console.log("init p1 +") resolve("p1") },2000) }),new Promise((resolve, reject) => { console.log("init p2") setTimeout(()=>{ console.log("init p2 +") resolve("p2") },1000) })]).then(res=>{console.log(res)}) 使用場景:設(shè)定一個請求的超時時間 Promise.race([new Promise((resolve,reject)=>{ setTimeout(()=>{ resolve("1") },2000) }),new Promise((resolve,reject)=>{ setTimeout(()=>{ reject(new Error("time out")) },1000) })]).then((res=>console.log(res)))Promise.resolve()
Promise.resolve("111").then(res=>console.log(res))Promise.reject()
Promise.reject("err").catch(res=>console.log(res))Promise.try()[目前只是一個提案]
# 【使用時機(jī)】對于一個方法如果不知道是同步異步方法,但是想要用then來做后續(xù)操作,同時希望同步方法同步執(zhí)行,異步方法異步執(zhí)行。 # 等價方案 (async () => f())() .then(res=>console.log(res)) .catch(err=>console.log(err))async需要注意什么
錯誤的捕獲
const f = () => console.log("now") (async () => f())() # async 會吃掉f()的錯誤,可以通過promise.catch()來捕獲 (async () => f())() .then(res=>console.log(res)) .catch(err=>console.log(err))參考
Promise
async/await
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/94108.html
Promise/async、await幫我們解決了什么 它給我們提供了一種新的異步編程解決方案,同時避免了困擾已久的回調(diào)地獄 // 異步的處理可能會產(chǎn)生這樣的回調(diào)地獄(第二個異步操作和第一個異步的結(jié)果有關(guān)系) let Ajax = function(data, success, error){ $.ajax({ data: data, success: function...
Promise/async、await幫我們解決了什么 它給我們提供了一種新的異步編程解決方案,同時避免了困擾已久的回調(diào)地獄 // 異步的處理可能會產(chǎn)生這樣的回調(diào)地獄(第二個異步操作和第一個異步的結(jié)果有關(guān)系) let Ajax = function(data, success, error){ $.ajax({ data: data, success: function...
摘要:的翻譯文檔由的維護(hù)很多人說,阮老師已經(jīng)有一本關(guān)于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會promise...... 本書的目的是以目前還在制定中的ECMASc...
摘要:版本以及之前,本身還沒有異步執(zhí)行代碼的能力,宿主環(huán)境傳遞給引擎,然后按順序執(zhí)行,由宿主發(fā)起任務(wù)。采納引擎術(shù)語,把宿主發(fā)起的任務(wù)稱為宏觀任務(wù),把引擎發(fā)起的任務(wù)稱為微觀任務(wù)。基本用法示例的回調(diào)是一個異步的執(zhí)行過程。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時間開的一個專欄,每天10分鐘,重構(gòu)你的前端知識體系,筆者主要整理學(xué)習(xí)過程的一些要點筆記以及感悟,完整的...
閱讀 2171·2020-06-12 14:26
閱讀 2477·2019-08-29 16:41
閱讀 1884·2019-08-29 15:28
閱讀 2448·2019-08-26 13:43
閱讀 753·2019-08-26 13:37
閱讀 2773·2019-08-23 18:13
閱讀 2791·2019-08-23 15:31
閱讀 1014·2019-08-23 14:10