Promise 一自我總結

2022-05-09 06:36:11 字數 4780 閱讀 3002

最近一下班就沒有持續學習,已經持續了幾個月,回家就是練練字,看看書,幹些七七八八的事。這樣的生活總感覺空落落的,畢業半年了,總感覺自己很多東西明白的不清不楚,希望接下來的每一天都能扎扎實實學好。

一、出現前景,promise是什麼

二、基本使用規則

es6 規定,promise物件是乙個建構函式,用來生成promise例項

const promise = new promise(function

(resolve, reject)

else

});

從上面**可以看到promise建構函式接受乙個函式作為引數,該函式的兩個引數分別是resolve和reject,此外這兩個引數是連兩個函式,由js引擎提供。

那麼這兩個函式的作用是:

(1) resolve: 將promise物件的狀態從未完成變成成功,非同步操作成功時呼叫。

(2) reject: 將promise物件的狀態從未完成變成失敗,非同步操作失敗時呼叫。

當promise例項生成後,就可以用then方法指定resolve狀態和reject狀態的**函式,then方法接受兩個**函式作為引數:

第乙個**是當promise物件的狀態為resolve時呼叫

第二個**函式是當promise物件的狀態為reject時呼叫,第二個**函式可選

基本案例:

var promise = new promise(function

(resolve, reject) )

promise.then(

function

(resolve) ,

function

(reject) )

結果輸出:

我是當前指令碼的同步任務,then方法指定的**函式等下我,你的在我後面排隊

promise的狀態為resolve,所以我被呼叫出來啦

promise.prototype.then()

promise 例項具有then方法, 那麼then方法是定義在原型物件promise.prototype上的

then方法返回的也是乙個新的promise例項,因此可以採用鏈式寫法,即then方法後面再呼叫另乙個then方法

run1.then(function(data) ).then(function(data) ).then(function(data) )

上面的**使用then方法,第乙個**函式完成以後,會將返回結果作為引數,傳入第二個**函式。

promise.prototype.catch():

用於指定發生錯誤時的**函式

run1.then(function

(data) ).

catch(function

(data) )

看到這裡的時候,可能會覺得promise物件不是有一種失敗呼叫的reject函式麼,如下格式:

run1.then(function

(data) ,

function

(data) )

對比這兩種寫法,第一種寫法要好於第二種寫法,理由是通過catch可以捕獲前面then方法執行中的錯誤,更接近同步的寫法(try/catch)。

因此,建議總是使用catch方法,而不使用then方法的第二個引數。

下面是乙個用promise物件實現的 ajax 操作的例子:

三、手寫乙個promise

*同步操作,且then只能呼叫一次

doctype html

>

<

html

>

<

head

>

<

meta

charset

="utf-8"

>

<

meta

name

="viewport"

content

="width=device-width,initial-scale=1.0"

>

<

title

>同步操作,且then只能呼叫一次

title

>

head

>

<

body

>

<

div

id="box"

>12

div>

<

script

>

function

promise(exector)

}function

reject(reason)

}try

catch

(e)

}promise.prototype.then

=function

(onfulfilled, onrejected)

if(this

.status

==='

rejected')

}let promise1

=new

promise(

function

(a, b) )

promise1.then(data

=>

, err

=>

)script

>

body

>

html

>

顯然我們平時用的都是非同步的方式,再來改改。需要在建構函式中存放兩個陣列,分別儲存成功**和失敗的** 因為可以then多次,所以需要將這些函式放在陣列中

*非同步操作,且then只能呼叫一次

doctype html

>

<

html

>

<

head

>

<

meta

charset

="utf-8"

>

<

meta

name

="viewport"

content

="width=device-width,initial-scale=1.0"

>

<

title

>非同步操作,且then只能呼叫一次

title

>

head

>

<

body

>

<

div

id="box"

>12

div>

<

script

>

function

promise(exector) )

//遍歷then中成功的所有**函式

} }

function

reject(reason) )

//遍歷then中失敗的所有**函式

} }

try

catch

(e)

}promise.prototype.then

=function

(onfulfilled, onrejected)

if(this

.status

==='

rejected')

if(this

.status

==='

pending

') )

this

.failcallback.push(()

=>

) }

}let promise1

=new

promise((resolve, reject)

=>

else

}, 1000

) })

promise1.then(data

=>

, err

=>

)script

>

body

>

html

>

* 非同步操作,then可以鏈式呼叫

promise 非同步載入的 自我理解

我認為promise相當於乙個容器,把一些發生未完成的事件儲存在promise容器中,在容器中發生完,在容器中的事件都繫結著三個可能存在的狀態,事件發生的結果影響著這三種的狀態,也只有非同步操作結果可以決定這三種狀態,其他任何操作都無法改變這種操作,一旦這種狀態改變,就不會再發生變化了,任何時候都可...

自我總結 20170804自我總結

昨天在工作了一年多的公司離職了。2016年6月27日入職九章雲極科技 到2017年8月3日。短短一年之內,自己從乙個新人混到了老員工,自己入職的時候才26個人,目前有80 預計下個月達到100人。自己也在公司內部經歷了轉崗。非常感謝能在畢業的時候,被越哥選中,慢慢的一年內學習了如何做資料整合,自己也...

promise方法總結

優點 1 物件的狀態不受外界的影響,只有非同步操作的結果可以決定是那種狀態 2 狀態一旦改變,就不會再次改變。任何時候都可以得到這個結果。在這裡跟 event 事件不同,如果錯過了這個事件結果再去監聽,是監聽不到event事件的。缺點 1 promise一旦執行無法取消。2 如果不設定 函式prom...