最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中的Promise詳解

 更新時(shí)間:2021年10月24日 17:12:20   作者:liuzhao0613  
這篇文章主要介紹了JavaScript中的Promise使用詳解,promise對(duì)象是JS進(jìn)階學(xué)習(xí)中的重要知識(shí)點(diǎn),需要的朋友可以參考下

Promise是異步編程的一種解決方案,是一個(gè)對(duì)象,可以獲取異步操作的消息,大大改善了異步編程的困難,避免了回調(diào)地獄,比傳統(tǒng)的解決方案回調(diào)函數(shù)和事件更合理和更強(qiáng)大。

從語(yǔ)法上講,Promise是一個(gè)對(duì)象,它可以獲取異步操作的消息。提供了一個(gè)統(tǒng)一的API,各種異步操作都可以用同樣的方法進(jìn)行處理

1、Promise的實(shí)例有三個(gè)狀態(tài):

(1)Pending(進(jìn)行中)

(2)Resolved(已完成)

(3)Rejected (已拒絕)

2、Promise的實(shí)例有兩個(gè)過(guò)程

(1)pending > fulfiled :Resolved

(2)pending > rejected :Rejected

注意:一旦從進(jìn)銷項(xiàng)狀態(tài)變?yōu)槠渌麪顟B(tài)就永遠(yuǎn)不能更改狀態(tài)了

Promise的基本用法:

1、創(chuàng)建Promise對(duì)象

Promise 對(duì)象代表一個(gè)異步操作,有三種狀態(tài):pending(進(jìn)行中)、fulfilled(已成功)、rejected(已失敗)

Promise構(gòu)造函數(shù)接收一個(gè)函數(shù)作為參數(shù),該函數(shù)的兩個(gè)參數(shù)分別是 resolve 和 reject

2、Promise 方法

Promise有五個(gè)常用方法:

(1)then()

then 方法可以接收兩個(gè)回調(diào)函數(shù)作為參數(shù),第一個(gè)回調(diào)函數(shù)是Promise對(duì)象的狀態(tài)改變?yōu)?resoved 是調(diào)用,第二個(gè)回調(diào)函數(shù)是 Promise 對(duì)象的狀態(tài)變?yōu)?rejected 時(shí)調(diào)用。其中第二個(gè)參數(shù)可以省略。

let promise = new Promise((resolve,reject)=>{
    ajax('first').success(function(res){
        resolve(res);
    })
})
promise.then(res=>{
    return new Promise((resovle,reject)=>{
        ajax('second').success(function(res){
            resolve(res)
        })
    })
}).then(res=>{
    return new Promise((resovle,reject)=>{
        ajax('second').success(function(res){
            resolve(res)
        })
    })
}).then(res=>{
 })

(2)catch()

該方法相當(dāng)于 then 方法的第二個(gè)參數(shù),指向 reject 的回調(diào)函數(shù)。

另一個(gè)作用是,在執(zhí)行resolve回調(diào)函數(shù)時(shí),如果出錯(cuò),拋出異常,不會(huì)停止隕星,而是進(jìn)入catch 方法中。

p.then((data) => {
     console.log('resolved',data);
},(err) => {
     console.log('rejected',err);
     }
); 
p.then((data) => {
    console.log('resolved',data);
}).catch((err) => {
    console.log('rejected',err);
});

(3)all()

all 方法可以完成并進(jìn)行任務(wù),它接收的是一個(gè)數(shù)組,數(shù)組的每一項(xiàng)都是 Promise 對(duì)象。當(dāng)數(shù)組中所有的 Promise 狀態(tài)都達(dá)到 resolved 的時(shí)候,all 方法的狀態(tài)就會(huì)變成 resolved,如果有一個(gè)狀態(tài)變成了 rejected。那么all 方法的狀態(tài)就會(huì)變成rejected。

javascript
let promise1 = new Promise((resolve,reject)=>{
	setTimeout(()=>{
       resolve(1);
	},2000)
});
let promise2 = new Promise((resolve,reject)=>{
	setTimeout(()=>{
       resolve(2);
	},1000)
});
let promise3 = new Promise((resolve,reject)=>{
	setTimeout(()=>{
       resolve(3);
	},3000)
});
Promise.all([promise1,promise2,promise3]).then(res=>{
    console.log(res);
    //結(jié)果為:[1,2,3] 
})

(4)rece()

rece 方法和 all 一樣,接收的參數(shù)是一個(gè)每項(xiàng)都是 Promise 的數(shù)組,但是與 all 不同的是,當(dāng)最先執(zhí)行完的事件執(zhí)行完之后,就直接返回該 promise 對(duì)象的值

rece的實(shí)際作用:當(dāng)要做一件事,超過(guò)長(zhǎng)時(shí)間就不做了,可以用這個(gè)方法來(lái)解決。

Promise.race([promise1,timeOutPromise(5000)]).then(res=>{})

(5)finally()

finally 方法用于指定不管 Promise 對(duì)象最后狀態(tài)如何,都會(huì)執(zhí)行的操作。(該方法是ES2018中引入標(biāo)準(zhǔn)的)

promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});

finally 方法的回調(diào)函數(shù)不接受任何參數(shù),這意味著沒(méi)有辦法知道前面的 Promise 狀態(tài)到底是 fulfilled 還是 rejected

promise
.finally(() => {
  // 語(yǔ)句
});
// 等同于
promise
.then(
  result => {
    // 語(yǔ)句
    return result;
  },
  error => {
    // 語(yǔ)句
    throw error;
  }
);

在上面代碼中,如果不寫(xiě) finally 方法,同樣的語(yǔ)句需要為成功和失敗兩種情況各寫(xiě)一次。有了 finally 方法只需寫(xiě)一次即可

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 使用Echarts設(shè)置地圖并觸發(fā)點(diǎn)擊事件的代碼

    使用Echarts設(shè)置地圖并觸發(fā)點(diǎn)擊事件的代碼

    這篇文章主要給大家介紹了關(guān)于使用Echarts設(shè)置地圖并觸發(fā)點(diǎn)擊事件的的相關(guān)資料,ECharts是一款基于JavaScript的數(shù)據(jù)可視化庫(kù),可以用于創(chuàng)建各種類型的交互式圖表,包括地圖,需要的朋友可以參考下
    2023-09-09
  • JavaScript中querySelectorAll的基本用法及詳細(xì)解析

    JavaScript中querySelectorAll的基本用法及詳細(xì)解析

    querySelectorAll是一個(gè)用于獲取文檔中所有匹配指定選擇器的元素的方法,這篇文章主要介紹了JavaScript中querySelectorAll的基本用法及詳細(xì)解析,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • JavaScript去除空格的三種方法(正則/傳參函數(shù)/trim)

    JavaScript去除空格的三種方法(正則/傳參函數(shù)/trim)

    個(gè)人認(rèn)為去除空格最好的方法.采用的是正則表達(dá)式,這是最核心的原理,同時(shí)呢,還是有其他方法可以辦到的,接下來(lái)將介紹一下三種方法(trim)空格,感興趣的朋友可以了解下,或許對(duì)你有幫助呢
    2013-02-02
  • JavaScript語(yǔ)句錯(cuò)誤throw、try及catch實(shí)例解析

    JavaScript語(yǔ)句錯(cuò)誤throw、try及catch實(shí)例解析

    這篇文章主要介紹了JavaScript語(yǔ)句錯(cuò)誤throw、try及catch實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • echarts展示區(qū)域地圖添加紋理圖片操作指南

    echarts展示區(qū)域地圖添加紋理圖片操作指南

    這篇文章主要給大家介紹了關(guān)于echarts展示區(qū)域地圖添加紋理圖片操作的相關(guān)資料,ECharts地圖組件支持使用圖片作為地圖區(qū)域的填充紋理,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • js 動(dòng)態(tài)加載事件的幾種方法總結(jié)

    js 動(dòng)態(tài)加載事件的幾種方法總結(jié)

    本篇文章主要是對(duì)js 動(dòng)態(tài)加載事件的幾種方法進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-12-12
  • 最新評(píng)論

    澄迈县| 广灵县| 和田市| 凤翔县| 普兰店市| 张家界市| 吴桥县| 崇仁县| 华坪县| 荃湾区| 望都县| 凤庆县| 攀枝花市| 石河子市| 崇信县| 昆明市| 泾源县| 崇仁县| 溧水县| 泽普县| 伊宁市| 宜兰市| 丘北县| 昔阳县| 吴堡县| 富源县| 乌拉特中旗| 灯塔市| 泾川县| 东丰县| 平凉市| 临江市| 武安市| 比如县| 章丘市| 连州市| 扶风县| 宁武县| 南安市| 泸西县| 新郑市|