詳細資訊用於javascript中的承諾使用詳解
熟悉前端開發的都一定寫過回撥方法(callback),簡單的說,回撥方法是一個函式被作為引數傳遞給另一個函式,比如下面的程式碼
function say (value) { alert(value); } function execute (someFunction, value) { someFunction(value); } execute(say, 'hello word');
say函式作為引數傳遞給execute函式,一般來說我們會碰到的回撥巢狀都不會很多,一般就一到兩級,但是某些情況下,回撥巢狀很多時,程式碼就會非常繁瑣,會給我們的程式設計帶來很多的麻煩,這種情況俗稱——地獄回撥。
那麼如何解決地獄回撥,保持我們的程式碼簡短,這時Promise就出場了,Promise物件可以理解為一次執行的非同步操作,使用Promise物件之後可以使用一種鏈式呼叫的方式來組織程式碼;讓程式碼更加的直觀。我們用Promise物件改造上面的程式碼
function say(value) { return new Promise(function(resolve, reject) { resolve(value) }) } function execute(value) { return new Promise(function(resolve, reject) { resolve(value) }) } execute('hello word').then((value)=>{ say(value).then((sayValue)=>{ alert(sayValue) }) })
上面程式碼只是根據第一段程式碼做的演示,程式碼量增加了,但是比傳統的解決方案更合理和更強大。
Promise正如字面意思-承諾,“承諾將來會執行”約定的事情。我們首先需要了解Promise的三種狀態:
pending: 初始狀態,既不是成功,也不是失敗狀態。
fulfilled: 意味著操作成功完成。
rejected: 意味著操作失敗。
先來構造下一個Promise例項
const promise = new Promise(function(resolve, reject) { // … some code If (/* 非同步操作成功 */){ resolve(value); } else { reject(error); } });
Promise建構函式接受一個函式作為引數,該函式的兩個引數分別是resolve和reject。它們是兩個函式。
Resolve函式的作用是,將Promise物件的狀態從“未完成”變為“成功”(即從 pending 變為 resolved),在非同步操作成功時呼叫,並將非同步操作的結果,作為引數傳遞出去;
Reject函式的作用是,將Promise物件的狀態從“未完成”變為“失敗”(即從 pending 變為 rejected),在非同步操作失敗時呼叫,並將非同步操作報出的錯誤,作為引數傳遞出去。
Promise例項生成以後,可以用then方法分別指定resolved狀態和rejected狀態的回撥函式。
還是拿第二段程式碼演示,講下執行過程,首先是這段程式碼
execute('hello word').then((value)=>{ say(value).then((sayValue)=>{ alert(sayValue) }) })
首先是呼叫execute方法,傳入‘hello word’,這個execute方法返回promise物件。呼叫用then方法接收值,再呼叫say方法,傳入execute方法返回的值,再呼叫then方法接收,最後alert。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69987244/viewspace-2733283/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 史上最為詳細的javascript繼承JavaScript繼承
- JavaScript繼承詳解(二)JavaScript繼承
- JavaScript中的this詳解JavaScript
- JavaScript 中 forEach、map、filter 詳細JavaScriptFilter
- JavaScript FormData的詳細介紹及使用JavaScriptORM
- 漢諾塔詳解
- SpringCloud中GateWay的詳細使用SpringGCCloudGateway
- JavaScript中的async/await詳解JavaScriptAI
- 對於接收到的GPS資訊詳解
- Java中的static詳細講解Java
- 詳解JavaScript中的嵌入式資料庫JavaScript資料庫
- javascript this詳細介紹JavaScript
- 用Nodejs Cheerio爬取NPM包詳細資訊NodeJSNPM
- JavaScript中 Map 物件詳解JavaScript物件
- javascript中的閉包closure詳解JavaScript
- iphone 獲取地址的詳細資訊iPhone
- springmvc中Dispatchservlet繼承體系詳解SpringMVCServlet繼承
- JavaScript this詳解JavaScript
- 詳解C++中繼承的基本內容C++中繼繼承
- Nginx 快取機制詳解!非常詳細實用Nginx快取
- JavaScript中的包裝型別詳解JavaScript型別
- Jenkins安裝部署使用圖文詳解(非常詳細)Jenkins
- jProcesses:使用Java獲取跨平臺程式的詳細資訊Java
- 一看你就懂,超詳細 java 中的 ClassLoader 詳解Java
- Linux:査看檔案的詳細資訊Linux
- 檢視Spark任務的詳細資訊Spark
- JavaScript——資料型別詳解JavaScript資料型別
- Windows 關於Robocopy的使用詳解Windows
- BAT面試必問細節:關於Netty中的ByteBuf詳解BAT面試Netty
- 基於 ThinkJS 的 WebSocket 通訊詳解JSWeb
- Kotlin——中級篇(四):繼承類詳解Kotlin繼承
- 命令檢視Win10等詳細啟用資訊的方法Win10
- Oracle中job的使用詳解Oracle
- JavaScript陣列的使用小結(詳細還是去看MDN)JavaScript陣列
- 關於工商詳細資訊 API,你想了解的都在這裡了API
- ES6中的類繼承和ES5中的繼承模式詳解繼承模式
- JavaScript 資料型別轉換詳細解釋已經parseInt等JavaScript資料型別
- Webpack 打包 Javascript 詳細介紹WebJavaScript