您好,登錄后才能下訂單哦!
es6中Promise 對象的功能有哪些?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
基本用法
ES6 規定,Promise對象是一個構造函數,用來生成Promise實例。
const promise = new Promise(function(resolve, reject) { //resolve (data) 成功 //reject (error )失敗 });
Promise實例生成以后,可以用then方法分別指定resolved狀態和rejected狀態的回調函數。
promise.then(function(value) { // success }, function(error) { // err });
then方法可以接受兩個回調函數作為參數。第一個回調函數是Promise對象的狀態變為resolved時調用,第二個回調函數是Promise對象的狀態變為rejected時調用。其中,第二個函數是可選的,不一定要提供。這兩個函數都接受Promise對象傳出的值作為參數。
下面是一個Promise對象的簡單例子
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包裝了一個圖片加載的異步操作。如果加載成功,就調用resolve方法,否則就調用reject方法。
2,用Promise對象實現的 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('出錯了', error); });
注意,調用resolve或reject并不會終結 Promise 的參數函數的執行。
Promise.prototype.finally()
finally方法用于指定不管 Promise 對象最后狀態如何,都會執行的操作。該方法是 ES2018 引入標準的。
promise .then(result => {···}) .catch(error => {···}) .finally(() => {···});
上面代碼中,不管promise最后的狀態,在執行完then或catch指定的回調函數以后,都會執行finally方法指定的回調函數,finally本質上是then方法的特例。
Promise.resolve()
//有時需要將現有對象轉為 Promise 對象,Promise.resolve方法就起到這個作用。 const jsPromise = Promise.resolve($.ajax('/whatever.json'));
上面代碼將 jQuery 生成的deferred對象,轉為一個新的 Promise 對象。
Promise.resolve等價于下面的寫法。
Promise.resolve('foo') // 等價于 new Promise(resolve => resolve('foo')) //Promise.resolve方法的參數分成四種情況。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。