中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

es6中Promise 對象的功能有哪些

發布時間:2021-05-10 17:50:00 來源:億速云 閱讀:213 作者:Leah 欄目:web開發

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方法的參數分成四種情況。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

漳浦县| 台山市| 南安市| 福泉市| 靖江市| 秭归县| 沂水县| 巩义市| 凤山县| 桓台县| 泰宁县| 长岭县| 长兴县| 肃北| 千阳县| 五家渠市| 衡阳市| 克什克腾旗| 舒兰市| 毕节市| 扎赉特旗| 海原县| 泗洪县| 普安县| 平泉县| 平邑县| 布拖县| 苗栗县| 大荔县| 大港区| 巴彦县| 蛟河市| 古交市| 五台县| 安国市| 正蓝旗| 杂多县| 两当县| 新龙县| 九龙县| 厦门市|