国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

es6中Promise 對(duì)象基本功能與用法實(shí)例分析

2024-05-06 15:44:46
字體:
供稿:網(wǎng)友

本文實(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ì)象的簡單例子

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方法的特例。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 永平县| 祁阳县| 平塘县| 昂仁县| 磐安县| 云阳县| 泾川县| 东乌珠穆沁旗| 清远市| 平阳县| 个旧市| 林口县| 垫江县| 北流市| 西平县| 曲松县| 武威市| 永靖县| 兴仁县| 盈江县| 诏安县| 南陵县| 锡林浩特市| 云和县| 隆林| 肥城市| 卢龙县| 乐至县| 泰顺县| 九江市| 新乡县| 托里县| 永安市| 池州市| 遂溪县| 栾川县| 集贤县| 桃园市| 灌阳县| 如东县| 天柱县|