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

首頁 > 開發 > JS > 正文

詳解ES6 Promise的生命周期和創建

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

一:Promise的概念

Promise的中文意思是‘承諾',什么叫承諾?承諾就是現在沒有發生,在將來的某個時刻一定會發生的事情。
放在編程語言的環境下,Promise就是異步事件的結果的占位符。我們不用去管異步事件的結果什么時候來,只需要關心異步事件的結果產生的時候,你想要做什么就對了。

二:Promise的生命周期

異步事件不是立即執行程序,它的結果可能要在動作發生后一段時間才到,所以它有個生命周期。例如用電飯鍋煮米飯,從【米下鍋開始定時】到【定時結束】,這是煮米飯的生命周期。
一個Promise的生命周期主要有2個階段:

1: unsettled(pending) 處理過程中 -> 米飯定時開始到定時結束這段期間
2: settled (fulfilled或者rejected) 處理完 -> 米飯定時結束狀態

我們看到settled階段會出現兩個可能的狀態fulfilled或者rejected,它們分別是什么意思呢:

1: fulfilled Promise操作完成的結果為成功 -> 煮米飯水的比例合適,飯熟了,成功
2: rejected Promise操作完成的結果為失敗 -> 煮米飯水放少了,飯是夾生的,失敗

Promise內部的屬性PromiseState被用來表示Promise的3種狀態:pending,fulfilled 和 rejected。但是我們無法讀取到這三個狀態,而是通過Promise提供的接口方法來書寫對應的處理程序,后面會講到。

三:如何讓創建一個Promise

相信前面通過對比煮飯這個過程,你已經對Promise的概念和生命周期有了一定的體會,接下來我們就看看如何真正第創建一個Promise(如何煮米飯)。

聲明:因為Promise有未完成的Promise和已完成的Promise不同類型,本篇我們只討論未完成的Promise。已完成的Promise后面會講,目前來說你不必關心,就當世界上沒有這個東西。

通過Promise構造函數,可以創建一個Promise。構造函數只有一個參數:一個函數,我們叫它執行器(executor)函數。你可以理解為煮飯用的電飯煲。

既然執行器(executor)函數也是一個函數,那它也有參數。對,它有2個參數:

1: resolve() 執行器(executor)函數成功時的處理函數
2: reject() 執行器(executor)函數失敗時的處理函數

我們用一段代碼來解釋一下:

let executor = function (resolve, reject) {};let promise = new Promise(executor);

通過上面的代碼示例,應該就能很清楚創建一個Promise的語法解構是怎樣的了。接下來我們用一個在Node.js中讀取文件的例子來演示:

let executor = function (resolve, reject) {  let fs = require('fs');  fs.readFile('data.txt', {encoding: 'utf8'}, function (error, content) {    if (error) {      reject(error); //在異步行為失敗時,調用reject()方法      return;    }    resolve(content); //在異步行為成功時,調用resolve()方法  });};let promise = new Promise(executor);

解釋一下上面的代碼:

1: 創建Promise,包裹異步程序

Promise本身并不執行任何真正的異步程序。我們只是把異步程序包裹在一個Promise里面,這樣做的目的其實是想把異步處理程序的結果給Promise,稍后再利用Promise提供的接口函數(then()或者catch())來對結果進行處理。

2: 我們在Promise的executor函數里調用真正的異步操作函數。

我們在executor函數里調用fs.readFile( )函數。fs.readFile( )函數本身是一個異步行為,其方法的第三個參數為一個回調函數,用來接收文件讀取的結果(失敗時候的error和成功時候的content)。

3: 把異步程序的結果給Promise

我們在fs.readFile( )的回調函數里,在文件讀取成功時調用resolve( )方法,失敗的時候調用reject( )方法,把成功或者失敗的結果通過2個函數的參數傳入,為Promise在fulfilled或者rejected兩種狀態時提供數據。

四:編寫Promise結果處理程序

前面我們已經了解到了怎么把一個異步處理事件包裹在一個Promise里面,并且通過resolve()和reject()把異步處理事件的結果傳遞的過程。終于來到了最后一步:使用結果數據(對比現實生活,你也可以理解為這一步叫做:驗證承諾)。
Promise提供2個方法來處理結果: Promise.prototype.then() 和 Promise.prototype.catch()。我們分別來看一下二者的功能:

1:Promise.prototype.then()

then()方法接收2個函數類行的參數:

1: 第一個參數為Promise在fulfilled狀態(成功狀態)時的回調方法
2: 第一個參數為Promise在rejected狀態(失敗狀態)時的回調方法
我們以之前的讀取文件為例子,看一下then()方法的使用:

let executor = function (resolve, reject) {  let fs = require('fs');  fs.readFile('data.txt', {encoding: 'utf8'}, function (error, content) {    if (error) {      reject(error); //在異步行為成功時,調用reject()方法      return;    }    resolve(content); //在異步行為失敗時,調用resolve()方法  });};let promise = new Promise(executor);//處理成功和失敗的情況promise.then(function (content) {  console.log(content);}, function (error) {  console.log(error)});

這兩個回調函數的參數也就是之前異步處理的結果數據。第一個函數的參數對應resolve()的參數content,第二個回調函數對應reject()的參數error。這樣我們也就能在這2個回調函數里面拿到數據,從而根據你的業務需求編寫對應的結果處理程序。

需要說明的是,這兩個回調函數參數都不是必須的,并不強制要求你都要處理。下面的代碼里,列覺了某2種結果處理程序,語法上都是合法的。只是正常的需求下,我們一般還是需要對成功和失敗都要處理。

 //只處理成功的情況promise.then(function (content) {  console.log(content);});//只處理失敗的情況promise.then(null, function (error) {  console.log(error)});

2: Promise.prototype.catch()

catch()方法只有一個參數:一個只處理rejected狀態的回調函數??赡軙腥艘蓡枺瑃hen()已經可以同時處理2個狀態,為什么還需要catch()方法?

原因在于前面我們提到的,在then()方法里,并不強制要求你提供處理rejected的回調函數。Promise有個特性:如果你沒有添加rejected處理函數,那所有的失敗會被自動忽略。

可能會有些開發者只關心成功狀態,而忘了提供rejected處理函數,從而給整個程序埋下隱患,這樣會造成很不好的用戶體驗。而catch()方法就是一個明確地處理rejected的方法,而不像在then()里面,因為是非必須參數而讓人很容易忽略。

背景說了那么多,我們看看catch()怎么用:

promise.catch(function (error) {  console.log(error)})

其實用法很簡單,它其實等價于是有reject處理函數的then():

promise.then(null, function (error) {  console.log(error)});

沒有語法要求一個完整的Promise處理程序必須要有catch()方法。如果你沒有使用catch()的習慣,最好總是不要忘記在使用then()的時候添加reject處理函數。

或者,如果你偶爾會忘記在then()里添加reject處理函數,那么記得使用catch()來為你做最安全的保障。

以上,就是關于Promise的基本概念和使用。在平常的開發中,Promise的使用還是非常頻繁的,也很好用,所以我認為掌握Promise是一個必須的功課。希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品综合网站| 亚洲精品一区二三区不卡| 一级做a爰片久久毛片美女图片| 91免费国产网站| 成人免费网站在线看| 欧美一区二区三区……| 亚洲伊人久久综合| 久久夜色精品国产亚洲aⅴ| 日韩一区二区三区国产| 国内精品免费午夜毛片| 欧美成人sm免费视频| 日韩一区二区三区国产| 播播国产欧美激情| 国产精品va在线播放| 国产精选久久久久久| 日韩欧美一区二区在线| 久久精品国产久精国产一老狼| 国产精品天天狠天天看| 国产精品免费看久久久香蕉| 国产婷婷成人久久av免费高清| 免费91麻豆精品国产自产在线观看| 亚洲第一精品电影| 久久91精品国产| www.国产精品一二区| 日韩精品视频免费专区在线播放| 操人视频在线观看欧美| 日韩成人av在线| 国产精品美女无圣光视频| 日韩免费av片在线观看| 91精品视频免费看| 国产精品久久久久久久午夜| 久久久久久com| 国产亚洲欧美另类中文| 日本中文字幕不卡免费| 亚洲一级黄色av| 在线精品视频视频中文字幕| 精品露脸国产偷人在视频| 亚洲国产精彩中文乱码av| 午夜精品三级视频福利| 精品美女永久免费视频| 久久精品在线视频| 欧美理论电影在线播放| 精品小视频在线| 91av在线免费观看视频| 日韩经典一区二区三区| 欧美怡红院视频一区二区三区| 国产精品美女久久久免费| 国产福利精品视频| 亚洲精品综合久久中文字幕| 人人爽久久涩噜噜噜网站| 成人观看高清在线观看免费| 色综合色综合久久综合频道88| 亚洲肉体裸体xxxx137| 亚洲欧洲视频在线| 亚洲欧美制服第一页| 久久久久久久久电影| 97超级碰碰碰久久久| 成人性教育视频在线观看| 992tv在线成人免费观看| 久久天天躁狠狠躁夜夜躁| 中文字幕9999| 91久久国产精品| 中文字幕一区二区三区电影| 国产精品一区二区三区成人| 欧美午夜无遮挡| 亚洲欧美国产精品va在线观看| 色婷婷av一区二区三区久久| 亚洲激情视频网站| 亚洲夜晚福利在线观看| 亚洲国产99精品国自产| 亚洲国产另类 国产精品国产免费| 日韩欧美一区二区三区| 日韩免费观看高清| 最新69国产成人精品视频免费| 日韩av在线免费| 亚洲欧美日韩在线高清直播| 欧美性开放视频| 国产精品mp4| 九九精品在线观看| 久久久久久久激情视频| 麻豆国产va免费精品高清在线| 伊人激情综合网| 亚洲一区二区三区sesese| 亚洲精品aⅴ中文字幕乱码| 欧美激情手机在线视频| 欧美又大粗又爽又黄大片视频| 伊人成人开心激情综合网| 91超碰caoporn97人人| 26uuu亚洲伊人春色| 亚洲欧美日韩图片| 中文字幕亚洲欧美日韩2019| 欧美性xxxx| 欧美大秀在线观看| 在线观看精品国产视频| 国产精品久久久久久久久久久不卡| 狠狠色狠狠色综合日日五| 亚洲美女激情视频| 成人黄色av网| 91香蕉嫩草神马影院在线观看| 国产精品久久久久久久久粉嫩av| 日本中文字幕久久看| 51精品在线观看| 欧美黑人又粗大| 久久精品电影网| 97在线免费视频| 日韩美女在线观看一区| 国产亚洲精品美女久久久| 午夜精品99久久免费| 国产精品久久久久久网站| 国产精品毛片a∨一区二区三区|国| 精品国产区一区二区三区在线观看| 5252色成人免费视频| 大荫蒂欧美视频另类xxxx| 亚洲国产欧美一区二区三区同亚洲| 亚洲色图色老头| 九九热在线精品视频| 国产精品美女免费| 欧美精品一区三区| 精品久久久久久电影| 亚洲精品视频网上网址在线观看| 91精品国产91久久久久久最新| 超碰日本道色综合久久综合| 欧美大片免费观看| 久久这里只有精品99| 日韩一级裸体免费视频| 久久久亚洲国产天美传媒修理工| 久久久国产视频| 日韩电影免费在线观看中文字幕| 亚洲黄页网在线观看| 精品在线观看国产| 日韩在线欧美在线国产在线| 色偷偷91综合久久噜噜| 91精品视频免费| 国产精品美女久久久免费| 亚洲精品国产精品国自产在线| 国产成人午夜视频网址| 另类视频在线观看| 成人国产亚洲精品a区天堂华泰| 成人黄在线观看| 日本午夜人人精品| 色综合久久精品亚洲国产| 欧美午夜www高清视频| 91在线中文字幕| 伊人伊成久久人综合网小说| 欧美激情视频给我| 亚洲xxxx在线| 久久在线免费观看视频| 最新国产精品拍自在线播放| 国内外成人免费激情在线视频网站| 欧美精品免费看| 亚洲国产成人在线播放| 国产精品视频一区二区高潮| 国产免费一区二区三区香蕉精| 亚洲成人三级在线| 中文欧美日本在线资源| 少妇高潮久久久久久潘金莲| 成人黄色在线观看| 日本三级韩国三级久久| 欧美视频在线观看 亚洲欧| 日本精品久久电影| 日韩精品视频免费专区在线播放| 久久欧美在线电影| 成人激情视频小说免费下载| 国产精品美女主播在线观看纯欲|