詳細資訊用於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中的this詳解JavaScript
- 詳解JavaScript中的thisJavaScript
- JavaScript 的 Date 最詳細解讀JavaScript
- 最詳細的JavaScript和事件解讀JavaScript事件
- JavaScript FormData的詳細介紹及使用JavaScriptORM
- JavaScript 中 forEach、map、filter 詳細JavaScriptFilter
- JavaScript中依賴注入詳細解析JavaScript依賴注入
- javascript中的Event Loop詳解JavaScriptOOP
- JavaScript 中的遍歷詳解JavaScript
- 詳解Javascript 中的this指標JavaScript指標
- 詳解Javascript中的Object物件JavaScriptObject物件
- Java中的static詳細講解Java
- php中curl的詳細解說PHP
- SpringCloud中GateWay的詳細使用SpringGCCloudGateway
- js中cookie的使用詳細分析JSCookie
- 史上最詳細的JavaScript事件使用指南JavaScript事件
- JavaScript中 Map 物件詳解JavaScript物件
- javascript this詳細介紹JavaScript
- JavaScript中的async/await詳解JavaScriptAI
- javascript中的閉包closure詳解JavaScript
- Nginx 快取機制詳解!非常詳細實用Nginx快取
- Javascript中this關鍵字詳解JavaScript
- 對於接收到的GPS資訊詳解
- iphone 獲取地址的詳細資訊iPhone
- PHP中return用法詳細解讀PHP
- lucene、lucene.NET詳細使用與優化詳解優化
- JavaScript 陣列中的 indexOf 方法詳解JavaScript陣列Index
- JavaScript中的包裝型別詳解JavaScript型別
- 生動詳細解釋javascript的冒泡和捕獲JavaScript
- JavaScript this詳解JavaScript
- Java面試-List中的sort詳細解讀Java面試
- 用Nodejs Cheerio爬取NPM包詳細資訊NodeJSNPM
- 詳解Javascript中正規表示式的使用JavaScript
- jsp中c標籤的詳細使用JS
- 詳解 JavaScript 的類JavaScript
- 詳解javascript的類JavaScript
- Oracle中job的使用詳解Oracle
- 一看你就懂,超詳細 java 中的 ClassLoader 詳解Java