javascript下使用Promise封裝FileReader_javascript技巧
來源:懂視網
責編:小采
時間:2020-11-27 20:50:58
javascript下使用Promise封裝FileReader_javascript技巧
javascript下使用Promise封裝FileReader_javascript技巧:Promise 在處理異步的時候是個很好的選擇,可以減少嵌套層次,讓代碼更好讀,邏輯更清晰。ES6 將其加入規(guī)范,jQuery 3.0 也修改實現向規(guī)范靠攏(3.0 發(fā)布公告)。一些新增元素比如 .fetch() 原生就 thenable,不過大多數以往的 API 還要依賴回調,這
導讀javascript下使用Promise封裝FileReader_javascript技巧:Promise 在處理異步的時候是個很好的選擇,可以減少嵌套層次,讓代碼更好讀,邏輯更清晰。ES6 將其加入規(guī)范,jQuery 3.0 也修改實現向規(guī)范靠攏(3.0 發(fā)布公告)。一些新增元素比如 .fetch() 原生就 thenable,不過大多數以往的 API 還要依賴回調,這

Promise 在處理異步的時候是個很好的選擇,可以減少嵌套層次,讓代碼更好讀,邏輯更清晰。ES6 將其加入規(guī)范,jQuery 3.0 也修改實現向規(guī)范靠攏(3.0 發(fā)布公告)。一些新增元素比如 .fetch() 原生就 “thenable”,不過大多數以往的 API 還要依賴回調,這個時候,我們只要將它們重新封裝,就能避開嵌套陷阱,享受 Promise 帶來的愉悅體驗。
Promise 一般用法
先來看下 Promise 的一般用法。
Promise 的驅動模型并不復雜:任何操作,假定它只有兩個結果,成功或者失敗。那么只需要在合適的時間調用合適的程序,進入合適的后續(xù)步驟即可。.then() 顧名思義,就是下一步的意思,當前面的 Promise 有了結果——即調用 resolve 或者 reject——之后,就啟動對應的處理函數。
Promise 實例創(chuàng)建后就會開始執(zhí)行,判定結果需要我們自己來,比如加載成功,或者滿足某個條件,等等。通過串聯 .then() 則可以完成一系列操作。每次調用 .then() 都會創(chuàng)建一個新的 Promise 實例,它會靜靜等待前面的實例狀態(tài)改變后再開始執(zhí)行。
封裝 FileReader
接下來開始封裝。思路很簡單,FileReader 除了提供各種 read 方法,還有幾個事件鉤子,其中 onerror 和 onload 很明顯可以作為判斷任務是否完成的依據。加載成功的話,就需要用到文件內容,所以將文件或文件內容傳遞到下一步也十分必要。
最后完成的代碼如下:
為了能真正派上用場,里面還有一些驗證文件類型的操作,不過跟本文主旨無關,略過不表。這段代碼的核心是創(chuàng)建一個 Promise 對象,等待 FileReader 讀取完成后調用 resolve 方法,或者出現問題時調用 reject 方法。
使用剛才封裝好的函數
接下來就可以在項目中使用了:
.then() 支持兩個參數,第一個在 Promise 成功時啟動,第二個自然在失敗時啟動。用 .catch() 可以實現同樣地效果。Promise 的好處除了可讀性更佳以外,返回的 Promise 對象還可以任意傳遞,繼續(xù)進行鏈式調用,有很大想象空間。
繼續(xù) .then()
于是我們不妨串聯更多操作(本來想寫個斷點續(xù)傳的,回頭再說吧):
全選復制放進筆記reader(file)
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
javascript下使用Promise封裝FileReader_javascript技巧
javascript下使用Promise封裝FileReader_javascript技巧:Promise 在處理異步的時候是個很好的選擇,可以減少嵌套層次,讓代碼更好讀,邏輯更清晰。ES6 將其加入規(guī)范,jQuery 3.0 也修改實現向規(guī)范靠攏(3.0 發(fā)布公告)。一些新增元素比如 .fetch() 原生就 thenable,不過大多數以往的 API 還要依賴回調,這