日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

promise之我见

發布時間:2023/12/18 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 promise之我见 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在我們平時的方法中有很多方法是promise封裝的,

有些函數后邊跟的then和catch 就是promise的方法,先看一下pormise的特點

?

(1)對象的狀態不受外界影響。Promise對象代表一個異步操作,有三種狀態:pending(進行中)、fulfilled(已成功)和rejected(已失敗)。

只有異步操作的結果,可以決定當前是哪一種狀態,任何其他操作都無法改變這個狀態。

這也是Promise這個名字的由來,它的英語意思就是“承諾”,表示其他手段無法改變。

?

?上邊這句話摘自阮一峰老師的博客? ??但是講是講出來了,總感覺有些朦朧,深挖一下,上圖看看這個promise里邊到底都有什么

?

?

需要注意的是Promise 的首字母要大寫 因為是構造函數 不然會報錯 ,之前犯過這樣的錯誤,找了好久,提醒一下

?

?

?

?promise的三種狀態

?

?PromiseValue 用法

?

?

上邊說了catch和then,一個接收成功一個接收失敗,promise里邊還有一個finally方法,他是不管成功還是失敗只要promise執行完畢這個函數都會被執行

?

?

?

(2)一旦狀態改變,就不會再變,任何時候都可以得到這個結果。

Promise對象的狀態改變,只有兩種可能:從pending變為fulfilled和從pending變為rejected。

只要這兩種情況發生,狀態就凝固了,不會再變了,會一直保持這個結果,這時就稱為 resolved(已定型)。

如果改變已經發生了,你再對Promise對象添加回調函數,也會立即得到這個結果。這與事件(Event)完全不同,事件的特點是,如果你錯過了它,再去監聽,是得不到結果的。

?

那么講了這么一大堆? 這個promise他到底有什么用處呢,就是為了解決回調地獄,之前在網上看到過這么一個圖片

?

這代碼看起來是不是很酸爽,回調一層套一層,多了的話感覺就是一個大型的沖擊波,沖擊著js開發者的心靈

?

舉個例子

?

?

but到這里貌似和回調沒有什么毛區別? ,他的優勢體現在哪里,so 看圖

?

?

打印了一下then方法? ?發現里邊還是一個promise,所以說return的結果可以繼續被.then,且結果可以繼續被調用

如果用回調的話就會造成回調地獄現象

promise的話大大的降低了維護成本和讓代碼看起來更優雅

?

promise除了原型鏈上的方法之外還有一些他本身的方法,如下圖

?

?

promise.all()

這個方法允許傳入一個數組 他會執行里邊所有的promise實例? 如果傳入的不是promise也會被轉換成promise

并且只有在傳入的所有的參數都返回resovled的時候all()方法才會是resolve,其中有一個參數是rejected的話

all()方法狀態就是變成rejected

?

promise.race()

這個方法相對于上邊的all()而言,它更像是比賽跑,他會返回第一個執行完畢的promise實例的狀態

?

promise.resolve()

這個方法會把一個對象創建成一個promise對象并return出resolve狀態出來

如果傳進去的是一個promise對象的話? 那么就會被直接return出來并執行resolve

?

?

promise.reject()

同理

該方法也會返回一個新的 Promise 實例,該實例的狀態為rejected并執行reject

?

?

如有不足之處請大家批評指正

?

轉載于:https://www.cnblogs.com/netUserAdd/p/10449873.html

總結

以上是生活随笔為你收集整理的promise之我见的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。