Promise/async、await幫我們解決了什么
它給我們提供了一種新的異步編程解決方案,同時避免了困擾已久的回調地獄
// 異步的處理可能會產生這樣的回調地獄(第二個異步操作和第一個異步的結果有關系) 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){ // 繼續循環回調 },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請求參數 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的方法總結 Promise.prototype.then() Promise.prototype.catch() Promise.prototype.finally() Promise.all()
# 當存在多個沒有相關性的異步操作時想一次性得到所有結果,可以使用promise.all() Promise.all([p1,p2,p3]) 只有當所有異步操作狀態變為resolve的時候 返回所有值得數組 當有一個返回reject的時候 返回值為第一個reject的值Promise.race()
# 當存在多個沒有相關性的異步操作時,想要獲得返回速度最快的異步操作采用 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)}) 使用場景:設定一個請求的超時時間 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()[目前只是一個提案]
# 【使用時機】對于一個方法如果不知道是同步異步方法,但是想要用then來做后續操作,同時希望同步方法同步執行,異步方法異步執行。 # 等價方案 (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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/116680.html
Promise/async、await幫我們解決了什么 它給我們提供了一種新的異步編程解決方案,同時避免了困擾已久的回調地獄 // 異步的處理可能會產生這樣的回調地獄(第二個異步操作和第一個異步的結果有關系) let Ajax = function(data, success, error){ $.ajax({ data: data, success: function...
Promise/async、await幫我們解決了什么 它給我們提供了一種新的異步編程解決方案,同時避免了困擾已久的回調地獄 // 異步的處理可能會產生這樣的回調地獄(第二個異步操作和第一個異步的結果有關系) let Ajax = function(data, success, error){ $.ajax({ data: data, success: function...
摘要:的翻譯文檔由的維護很多人說,阮老師已經有一本關于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。 JavaScript Promise 迷你書(中文版) 超詳細介紹promise的gitbook,看完再不會promise...... 本書的目的是以目前還在制定中的ECMASc...
摘要:版本以及之前,本身還沒有異步執行代碼的能力,宿主環境傳遞給引擎,然后按順序執行,由宿主發起任務。采納引擎術語,把宿主發起的任務稱為宏觀任務,把引擎發起的任務稱為微觀任務。基本用法示例的回調是一個異步的執行過程。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的...
閱讀 1602·2021-11-02 14:48
閱讀 3657·2019-08-30 15:56
閱讀 2771·2019-08-30 15:53
閱讀 3214·2019-08-30 14:09
閱讀 3101·2019-08-30 12:59
閱讀 2857·2019-08-29 18:38
閱讀 2697·2019-08-26 11:41
閱讀 2215·2019-08-23 16:45