es6中Promise 對(duì)象基本功能與用法實(shí)例分析
本文實(shí)例講述了es6中Promise 對(duì)象基本功能與用法。分享給大家供大家參考,具體如下:
Promise 是異步編程的一種解決方案,解決——回調(diào)函數(shù)和事件
ES6 規(guī)定,Promise對(duì)象是一個(gè)構(gòu)造函數(shù),用來生成Promise實(shí)例。
下面代碼創(chuàng)造了一個(gè)Promise實(shí)例。
基本用法
ES6 規(guī)定,Promise對(duì)象是一個(gè)構(gòu)造函數(shù),用來生成Promise實(shí)例。
const promise = new Promise(function(resolve, reject) { //resolve (data) 成功 //reject (error )失敗 });
Promise實(shí)例生成以后,可以用then方法分別指定resolved狀態(tài)和rejected狀態(tài)的回調(diào)函數(shù)。
promise.then(function(value) { // success }, function(error) { // err });
then方法可以接受兩個(gè)回調(diào)函數(shù)作為參數(shù)。第一個(gè)回調(diào)函數(shù)是Promise對(duì)象的狀態(tài)變?yōu)閞esolved時(shí)調(diào)用,第二個(gè)回調(diào)函數(shù)是Promise對(duì)象的狀態(tài)變?yōu)閞ejected時(shí)調(diào)用。其中,第二個(gè)函數(shù)是可選的,不一定要提供。這兩個(gè)函數(shù)都接受Promise對(duì)象傳出的值作為參數(shù)。
下面是一個(gè)Promise對(duì)象的簡(jiǎn)單例子
function fun(ms){ return new promise((res,rej) => { setTimeout(res,ms) }) } fun(100).then((val) => { console.log(val) })
promise還可以用來加載圖片
function loadImageAsync(url) { return new Promise(function(resolve, reject) { const image = new Image(); image.onload = function() { resolve(image); }; image.onerror = function() { reject(new Error('Could not load image at ' + url)); }; image.src = url; }); }
上面代碼中,使用Promise包裝了一個(gè)圖片加載的異步操作。如果加載成功,就調(diào)用resolve方法,否則就調(diào)用reject方法。
2,用Promise對(duì)象實(shí)現(xiàn)的 Ajax 操作的例子。
const getJSON = function(url) { const promise = new Promise(function(resolve, reject){ const handler = function() { if (this.readyState !== 4) { return; } if (this.status === 200) { resolve(this.response); } else { reject(new Error(this.statusText)); } }; const client = new XMLHttpRequest(); client.open("GET", url); client.onreadystatechange = handler; client.responseType = "json"; client.setRequestHeader("Accept", "application/json"); client.send(); }); return promise; }; getJSON("/posts.json").then(function(json) { console.log('Contents: ' + json); }, function(error) { console.error('出錯(cuò)了', error); });
注意,調(diào)用resolve或reject并不會(huì)終結(jié) Promise 的參數(shù)函數(shù)的執(zhí)行。
Promise.prototype.finally()
finally方法用于指定不管 Promise 對(duì)象最后狀態(tài)如何,都會(huì)執(zhí)行的操作。該方法是 ES2018 引入標(biāo)準(zhǔn)的。
promise .then(result => {···}) .catch(error => {···}) .finally(() => {···});
上面代碼中,不管promise最后的狀態(tài),在執(zhí)行完then或catch指定的回調(diào)函數(shù)以后,都會(huì)執(zhí)行finally方法指定的回調(diào)函數(shù),finally本質(zhì)上是then方法的特例。
Promise.resolve()
//有時(shí)需要將現(xiàn)有對(duì)象轉(zhuǎn)為 Promise 對(duì)象,Promise.resolve方法就起到這個(gè)作用。 const jsPromise = Promise.resolve($.ajax('/whatever.json'));
上面代碼將 jQuery 生成的deferred對(duì)象,轉(zhuǎn)為一個(gè)新的 Promise 對(duì)象。
Promise.resolve等價(jià)于下面的寫法。
Promise.resolve('foo') // 等價(jià)于 new Promise(resolve => resolve('foo')) //Promise.resolve方法的參數(shù)分成四種情況。
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript操作DOM技巧總結(jié)》、《JavaScript頁面元素操作技巧總結(jié)》、《JavaScript事件相關(guān)操作與技巧大全》、《JavaScript查找算法技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
javascript實(shí)現(xiàn)九宮格相加數(shù)值相等
這篇文章主要介紹了javascript實(shí)現(xiàn)九宮格相加數(shù)值相等的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-02-02javascript+mapbar實(shí)現(xiàn)地圖定位
地圖定位 圖吧地圖定位 附j(luò)avascript源碼每行都有注釋2010-04-04JS+JSP通過img標(biāo)簽調(diào)用實(shí)現(xiàn)靜態(tài)頁面訪問次數(shù)統(tǒng)計(jì)的方法
這篇文章主要介紹了JS+JSP通過img標(biāo)簽調(diào)用實(shí)現(xiàn)靜態(tài)頁面訪問次數(shù)統(tǒng)計(jì)的方法,基于JavaScript動(dòng)態(tài)調(diào)用jsp頁面通過對(duì)TXT文本文件的讀寫實(shí)現(xiàn)統(tǒng)計(jì)訪問次數(shù)的功能,需要的朋友可以參考下2015-12-12touch.js 拖動(dòng)、縮放、旋轉(zhuǎn) (鼠標(biāo)手勢(shì))功能代碼
這篇文章主要介紹了touch.js 拖動(dòng)、縮放、旋轉(zhuǎn) (鼠標(biāo)手勢(shì))功能,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02JavaScript Array對(duì)象擴(kuò)展indexOf()方法
JavaScript中Array對(duì)象沒有indexOf()方法,可通過下面的代碼擴(kuò)展,需要的朋友可以參考下2014-05-05js getElementsByTagName的簡(jiǎn)寫方式
用最少的代碼,做最多的事情. getElementsByTagName的簡(jiǎn)寫方法.2010-06-06