亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

深入理解JS異步編程-Promise

2024-05-06 16:51:44
字體:
來源:轉載
供稿:網友

前言

“JS 是基于單線程事件循環”的概念構建的,回調函數不會立即執行,由事件輪詢去檢測事件是否執行完畢,當執行完有結果后,將結果放入回調函數的參數中,然后將回調函數添加到事件隊列中等待被執行。

同時也講了回調函數的問題:

一是“回調地獄”,因為異步回調函數的特點:回調函數是作為異步函數的參數,一層一層嵌套,當嵌套過多,將使代碼邏輯變得混亂,也無法做好錯誤捕捉和處理(只能在回調函數內部 try catch)。

二是回調的執行方式不符合自然語言的線性思維方式,不容易被理解。

三是控制反轉(控制權在其他人的代碼上),假如異步函數是別人提供的庫,我們把回調函數傳進去,我們并不能知道異步函數在調用回調函數之外做了什么事情。

func1(() => {func2(() => {func3(() => {func4(() => {try {...} catch (err){...}})});});});

一、Promise 原理

首先,Promise 中文翻譯為“承諾”, 是 JavaScript 的一種對象,表示承諾終將返回一個結果,無論成功還是失敗。
Promise 有三個狀態:等待中(pending),完成(fullfilled),失?。╮ejected), Promise 的設計具有原子性,狀態一旦從 pending 狀態轉換為 fullfilled 狀態或者 rejected 狀態后,將不能被改變。

JS,異步編程,Promise

var promise1 = new Promise((resolve, reject) => {console.log("Promise 構造器會立即執行");setTimeout(function (){if(true) {resolve("完成");} else {reject("失敗");}}, 1000);})promise1.then((result) => {// do somethingconsole.log(result);return 1// return Promise.resolve(1); // 返回一個決議為成功的 promise 實例// return Promise.reject("error"); // 返回一個決議為拒絕的 Promise 實例}).then((result) => {// .then() 方法會返回一個 promise, 完成調用的參數為前一個 promise 的返回值或者決議值。// do other thingsconsole.log(result);throw new Error("錯誤") // 拋出錯誤是隱式拒絕}).catch((error) => {// 捕捉錯誤console.log(error)}).then(() => {// 還能繼續執行!}).finally(() => {// always do somethingsconsole.log("finally!")})

二、Promise 的優勢

1.鏈式調用

Promise 使用 then 方法后還會返回一個新的 Promise 對象,便于我們傳遞狀態數據,同時鏈式寫法接近于同步寫法,更符合線性思維。

2.錯誤捕捉

相比回調函數的錯誤無法在外部捕捉的問題,Promise 能夠為一連串的異步調用提供錯誤處理。

3.控制反轉再反轉

由于第三方提供的異步函數,無法保證回調函數如何被執行,但是 Promise 的特點,能夠保證異步函數只能被 resolve 一次,以及始終以異步的形式執行代碼。

4.可以利用 Promise.all 和 Promise.race 來解決 Promise 始終未決議和并行 Promise 嵌套的問題

三、Promise 的不足

1.每個 .then() 都是一個獨立的作用域

加入有很多個 .then() 方法,就會創建很多個獨立的作用域,那么將只能通過外面包裹一層函數作用域的閉包來共享狀態數據

2.無法取消單個 .then()

當 Promise 鏈中任意一個 .then() 方法中有語句執行錯誤后,盡管經過 catch 方法的錯誤處理,還是并不會中斷整個 Promise 鏈的執行。

3.無法得知進度

由于 Promise 只能從 pending 到 fullfilled 或 rejected 狀態,無法得知 pending 階段的進度。

四、Promise 應用

// Promise 封裝 ajaxfunction fetch(method, url, data){return new Promise((resolve, reject) => {var xhr = new XMLHttpRequest();var method = method || "GET";var data = data || null;xhr.open(method, url, true);xhr.onreadystatechange = function() {if(xhr.status === 200 && xhr.readyState === 4){resolve(xhr.responseText);} else {reject(xhr.responseText);}}xhr.send(data);})}// 使用fetch("GET", "/some/url.json", null).then(result => {console.log(result);})// 封裝 nodejs error first 風格回調function readFile(url) {return new Promise((resolve, reject) => {fs.readFile(url,'utf8', (err, data) => {if(err) {reject(err);return;}resolve(data)}) })}

五、總結

Promise 是 ES6 提出的簡化異步流程控制新規范,強調異步任務的完成狀態且具有原子性,這使得我們的代碼更容易追蹤和維護。Promise 在事件輪詢中屬于異步事件隊列中的微任務,而微任務總是一次性全部執行,而宏任務是每輪輪詢執行一個。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91极品视频在线| 97超级碰碰人国产在线观看| 久久精品亚洲热| 精品福利在线视频| 日本伊人精品一区二区三区介绍| 91免费精品国偷自产在线| 一区二区欧美日韩视频| xxx欧美精品| 中文字幕日韩电影| 精品久久久精品| 久久理论片午夜琪琪电影网| 成人激情视频免费在线| 欧美激情视频网站| 97在线免费观看视频| 亚洲精品少妇网址| 77777少妇光屁股久久一区| 亚洲aⅴ男人的天堂在线观看| 色悠悠久久久久| 日韩视频永久免费观看| 欧美激情日韩图片| 亚洲高清福利视频| 国产成人午夜视频网址| 国产a级全部精品| 国产精品爽爽爽爽爽爽在线观看| 日韩电影中文字幕在线| 日韩电影大片中文字幕| 欧美激情极品视频| 国产91在线播放九色快色| 国产精品www网站| 91成人福利在线| 欧美国产激情18| 色狠狠av一区二区三区香蕉蜜桃| 亚洲香蕉伊综合在人在线视看| 国产成人97精品免费看片| 中文字幕亚洲综合久久| 欧美亚洲在线视频| 欧美天天综合色影久久精品| 精品少妇一区二区30p| 国产精品人人做人人爽| 97久久精品人人澡人人爽缅北| 川上优av一区二区线观看| 欧美成人国产va精品日本一级| 国产视频久久网| 亚洲综合精品伊人久久| 欧美在线观看一区二区三区| 国产精品国产三级国产aⅴ浪潮| 欧美大片免费观看在线观看网站推荐| 国产成人在线精品| 欧美激情精品久久久久久蜜臀| 97色在线播放视频| 欧美日韩在线视频一区二区| 亚洲高清一二三区| 久久亚洲一区二区三区四区五区高| 日本一区二三区好的精华液| 国产精品视频在线观看| 亚洲毛片在线看| 久久久久久久久亚洲| 日韩暖暖在线视频| 亚洲精品aⅴ中文字幕乱码| 亚洲性猛交xxxxwww| 欧美大秀在线观看| 亚洲国产欧美一区二区三区久久| 久99九色视频在线观看| 91久久精品视频| 国产成一区二区| 亚洲精品自在久久| www.久久撸.com| 亚洲国产精品小视频| 欧美性资源免费| 亚洲精品一区av在线播放| 国产精品91久久久| 亚洲精品电影网站| 尤物精品国产第一福利三区| 亚洲一区二区国产| 国产91精品视频在线观看| 国产精品成av人在线视午夜片| 亚洲欧美国产视频| 另类天堂视频在线观看| 日韩少妇与小伙激情| 91国产一区在线| 久久精品这里热有精品| 亚洲大胆美女视频| 国产成人一区二区| 在线免费看av不卡| 色先锋久久影院av| 亚洲国产天堂久久综合网| 亚洲精品999| 国产精品国内视频| 亚洲最大福利视频| 亚洲欧美日韩一区二区在线| 在线中文字幕日韩| 亚洲天堂精品在线| 亚洲一区中文字幕在线观看| 91九色国产社区在线观看| 国语自产精品视频在线看抢先版图片| 国产女人精品视频| 亚洲午夜av电影| 久久久精品在线观看| 日本高清不卡的在线| 午夜精品久久久久久久99黑人| 91免费精品视频| 狠狠色香婷婷久久亚洲精品| 国产亚洲一区精品| 在线中文字幕日韩| 97涩涩爰在线观看亚洲| 视频直播国产精品| 亚洲欧美在线播放| 中文字幕一区二区精品| 日韩资源在线观看| 免费不卡在线观看av| www.亚洲人.com| 亚洲国产小视频在线观看| 欧美专区在线观看| 国产亚洲欧美日韩精品| 亚洲精品国偷自产在线99热| 欧美电影免费观看高清| 欧美成在线观看| 日韩美女在线观看一区| 啪一啪鲁一鲁2019在线视频| 热99久久精品| 日韩成人久久久| 精品久久久久久久久久| 国产69久久精品成人| 欧美老妇交乱视频| 日韩欧美综合在线视频| 国产伦精品一区二区三区精品视频| 日韩精品黄色网| 色综合五月天导航| 欧美久久久精品| 2019最新中文字幕| 亚洲国产成人91精品| 亚洲欧美日韩中文在线| 欧美一级大片视频| 国产精品香蕉av| 日韩免费高清在线观看| 亚洲精品美女久久久久| 久久国产精品久久久久久久久久| 夜夜嗨av一区二区三区四区| 欧美高清在线播放| 91九色国产社区在线观看| 久久久久久久久综合| 一区二区三区精品99久久| 日韩亚洲综合在线| 国产一区二区三区网站| 国产成人亚洲综合91| 一区二区欧美亚洲| 91亚洲精品视频| 91久久国产婷婷一区二区| 久久视频国产精品免费视频在线| 精品福利视频导航| 中文字幕亚洲自拍| 欧美综合在线观看| 日韩av在线资源| 日韩欧美成人免费视频| 美女视频黄免费的亚洲男人天堂| 久久精品国产精品亚洲| 亚洲图片在区色| 亚洲国产成人在线视频| 国产精品 欧美在线| 久久久亚洲天堂| 日韩va亚洲va欧洲va国产| 最近2019中文字幕一页二页| 亚洲欧美激情精品一区二区| 国语自产精品视频在线看一大j8|