一: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);
新聞熱點
疑難解答
圖片精選