Promise物件及它在js中的執行順序

2022-05-30 09:21:08 字數 1151 閱讀 4127

學習阮一峰老師的es6入門後的記錄

1、promise的定義

promise是乙個物件,通常包裹著乙個非同步操作,promise物件提供一些介面的方法,返回一些操作的狀態或錯誤資訊

promise有三種狀態 pending(進行中)、resolved(已完成,也叫fulfilled)、rejected(已失敗)

注意:promise中的狀態只能由 pending -> resolved 和 pending -> rejected兩種,且狀態一旦確認不能轉變

promise的基本用法

2、promise的一些方法

.then(fn1,fn2)

.then()方法中的引數,fn1是resolved狀態的**函式,fn2(可選)是rejected狀態的**函式,一般只用fn1來作為promise成功的處理函式

注意:.then()返回的是乙個新的promise例項,.then(fn1)fn1中的返回的資料作為新promise的引數

.catch(fn)

.then(null/undefined,function(){})的別名,是發生錯誤是的**函式

注意:在promise執行順序中當.then()的成功處理函式執行,導致不會執行.catch()中的函式,反之一樣

.finally(function(){})

不論是執行.then()還是執行.catch(),finally都會執行

**示例:

3、promise中的執行順序

js執行是單執行緒的,所以瀏覽器執行會把js事件,劃分為當前執行,和等待執行的棧

等待執行中的棧一般為非同步事件,其中也分為巨集任務和微任務之分,一般是執行乙個巨集任務後,執行微任務棧裡的所有微任務,在接著執行下乙個巨集任務,在執行任務途中會將對應的巨集任務和微任務依次新增到對應的棧中(也就是說在下乙個巨集任務執行之前,微任務的等待棧是空的)

promise物件.then,.catch為微任務

**示例:

上面**的執行順序是:

js非同步流程的promise及generator

同步 同時只能做一件事 優點 更簡單 例項const p1 new promise resolve,reject then data const p2 new promise resolve,reject 200 then data console.log 主線程任務 promise.all p1,...

ES6中的Promise物件

列印出promise,我們能看出promise是乙個建構函式 那什麼是promise?promise是非同步程式設計的一種解決方案,它有三種狀態,promise執行完成後,只會有成功和失敗的狀態,並且不可被更改 pending 就緒狀態 resolved 成功狀態 pending 就緒狀態 reje...

JS之JavaScript中的物件導向及DOM操作

物件導向 內建物件 eval 計算表示式的值 isnan 是否是非數字的值 1 math物件 math.round 隨機產生0 1之間的數值 math.random 四捨五入 2 date物件 通過date物件既可以設定時間也可以獲取系統時間 gethours 返回date物件的小時 getminu...