亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript中的Promise詳解

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

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

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

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

(1)Pending(進行中)

(2)Resolved(已完成)

(3)Rejected (已拒絕)

2、Promise的實例有兩個過程

(1)pending > fulfiled :Resolved

(2)pending > rejected :Rejected

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

Promise的基本用法:

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

Promise 對象代表一個異步操作,有三種狀態(tài):pending(進行中)、fulfilled(已成功)、rejected(已失?。?/p>

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

2、Promise 方法

Promise有五個常用方法:

(1)then()

then 方法可以接收兩個回調(diào)函數(shù)作為參數(shù),第一個回調(diào)函數(shù)是Promise對象的狀態(tài)改變?yōu)?resoved 是調(diào)用,第二個回調(diào)函數(shù)是 Promise 對象的狀態(tài)變?yōu)?rejected 時調(diào)用。其中第二個參數(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 方法的第二個參數(shù),指向 reject 的回調(diào)函數(shù)。

另一個作用是,在執(zhí)行resolve回調(diào)函數(shù)時,如果出錯,拋出異常,不會停止隕星,而是進入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 方法可以完成并進行任務(wù),它接收的是一個數(shù)組,數(shù)組的每一項都是 Promise 對象。當(dāng)數(shù)組中所有的 Promise 狀態(tài)都達到 resolved 的時候,all 方法的狀態(tài)就會變成 resolved,如果有一個狀態(tài)變成了 rejected。那么all 方法的狀態(tài)就會變成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ù)是一個每項都是 Promise 的數(shù)組,但是與 all 不同的是,當(dāng)最先執(zhí)行完的事件執(zhí)行完之后,就直接返回該 promise 對象的值

rece的實際作用:當(dāng)要做一件事,超過長時間就不做了,可以用這個方法來解決。

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

(5)finally()

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • HTML5 JS壓縮圖片并獲取圖片BASE64編碼上傳

    HTML5 JS壓縮圖片并獲取圖片BASE64編碼上傳

    這篇文章主要介紹了HTML5 JS壓縮圖片并獲取圖片BASE64編碼上傳方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 一些超實用的JS常用算法詳解(推薦!)

    一些超實用的JS常用算法詳解(推薦!)

    算法是計算機算法即計算機能夠執(zhí)行的算法,只有明確了算法后,才能使應(yīng)用程序?qū)崿F(xiàn)某些功能,所以通常人們會將算法稱為程序的靈魂,下面這篇文章主要給大家分享介紹了一些超實用的JS常用算法的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • webpack優(yōu)化的深入理解

    webpack優(yōu)化的深入理解

    這篇文章主要給大家介紹了關(guān)于webpack優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Javascript模板技術(shù)

    Javascript模板技術(shù)

    Javascript模板技術(shù)...
    2007-04-04
  • 4 種滾動吸頂實現(xiàn)方式的比較

    4 種滾動吸頂實現(xiàn)方式的比較

    這篇文章主要介紹了4種滾動吸頂實現(xiàn)方式的比較,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • js includes方法的使用小結(jié)

    js includes方法的使用小結(jié)

    JavaScript中的數(shù)組includes()方法用于判斷數(shù)組中是否包含指定的元素,并返回一個布爾值,這篇文章主要介紹了js includes方法的使用,需要的朋友可以參考下
    2024-01-01
  • JavaScript頁面加載事件實例講解

    JavaScript頁面加載事件實例講解

    在本篇文章中我們給大家通過實例講解一下關(guān)于JavaScript頁面加載事件的相關(guān)知識點內(nèi)容,有需要的朋友們可以參考下。
    2019-09-09
  • js滾輪事件兼容性問題需要注意哪些

    js滾輪事件兼容性問題需要注意哪些

    這篇文章主要為大家詳細介紹了js滾輪事件需要注意的兼容性問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之二叉樹遍歷算法詳解【先序、中序、后序】

    JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之二叉樹遍歷算法詳解【先序、中序、后序】

    這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之二叉樹遍歷算法,結(jié)合實例形式詳細分析了javascript二叉樹的定義及先序遍歷、中序遍歷、后序遍歷等相關(guān)遍歷操作實現(xiàn)技巧,需要的朋友可以參考下
    2019-02-02
  • javascript 尋找錯誤方法整理

    javascript 尋找錯誤方法整理

    為了以后能快速尋找到這方面的錯誤,節(jié)約更多的時間,下面將問題的解決方法整理了一下
    2014-06-06

最新評論