国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 幫助中心 > 正文

有關Promises異步問題詳解

2024-07-09 22:41:17
字體:
來源:轉載
供稿:網友

迄今為止,可能每個JavaScript開發者和他們的祖母都聽說過Promises。如果你沒有,那么你即將會。promises的概念是由CommonJS小組的成員在 Promises/A規范 中提出來的。Promises被逐漸用作一種管理異步操作回調的方法,但出于它們的設計,它們遠比那個有用得多。事實上,由于它們的多種用法,有無數人告訴我――在我寫過一些關于promises的東西后――我“遺漏了promises的重點”。那么什么是promises的重點呢?

一點關于Promises的東西

在我開始promise的“重點”之前,我想我應該給你一點它們如何工作的內貌。一個promise是一個對象――根據Promise/A規范――只需要一個方法:then。then方法帶有三個參數:一個成功回調,一個失敗回調,和一個前進回調(規范沒有要求包括前進回調的實現,但是很多都實現了)。一個全新的promise對象從每個then的調用中返回。
一個promise可以是三種狀態之一:未完成的,完成的,或者失敗的。promise以未完成的狀態開始,如果成功它將會是完成態,如果失敗將會是失敗態。當一個promise移動到完成態,所有注冊到它的成功回調將被調用,而且會將成功的結果值傳給它。另外,任何注冊到promise的成功回調,將會在它已經完成以后立即被調用。

同樣的事情發生在promise移動到失敗態的時候,除了它調用的是失敗回調而不是成功回調。對包含前進特性的實現來說,promise在它離開未完成狀態以前的任何時刻,都可以更新它的progress。當progress被更新,所有的前進回調(progress callbacks)會被傳遞以progress的值,并被立即調用。前進回調被以不同于成功和失敗回調的方式處理;如果你在一個progress更新已經發生以后注冊了一個前進回調,新的前進回調只會在它被注冊以后被已更新的progress調用。
我們不會進一步深入promise狀態是如何管理的,因為那不在規范之內,而且每個實現都有差別。在后面的例子中,你將會看到它是如何完成的,但目前這就是所有你需要知道的。

處理回調

像前面提到的為異步操作處理回調,是promises的最基本和最普通的用途,讓我們將一個標準的回調與一個采用了promise的回調比較一下。

// Normal callback usageasyncOperation(function() {  // Here's your callback});// Now `asyncOperation` returns a promiseasyncOperation().then(function(){  // Here's your callback});

我很懷疑只是看到這個例子的話是否有人會真的關心去使用promises。看起來沒有什么好處,除了“then”使得在異步操作完成之后的回調函數被調用這件事看起來更加明顯。但是即使是這個好處,我們現在有了更多的代碼(抽象應該使我們的代碼更短,不是嗎?)而且promise比標準回調稍微性能差一點。

但是,不要讓這阻礙到你。如果這就是promise可以做的最好的事,這篇文章就不會存在了

厄運的金字塔

// Normal callback usage => PYRAMID OF DOOOOOOOOMasyncOperation(function(data){  // Do some processing with `data`  anotherAsync(function(data2){    // Some more processing with `data2`    yetAnotherAsync(function(){      // Yay we're finished!    });  });});// Let's look at using promisesasyncOperation().then(function(data){  // Do some processing with `data`  return anotherAsync();}).then(function(data2){  // Some more processing with `data2`  return yetAnotherAsync();}).then(function(){  // Yay we're finished!});

正如你所見,promises的使用使得事情變扁平而且更可讀了。這能起作用是因為――像早先提到的――then返回了一個promise,所以你可以將then的調用不停的串連起來。由then返回的promise裝載了由調用返回的值。如果調用返回了一個promise(像這個例子中的情形一樣),then返回的 promise裝載了與你的回調返回的promise所裝載的相同值。這內容很多,因此我將幫助你一步一步的理解它

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌鲁木齐市| 台中市| 文昌市| 太康县| 肃宁县| 泽州县| 偏关县| 孟州市| 马尔康县| 曲阳县| 平江县| 南康市| 祥云县| 汝阳县| 昂仁县| 慈溪市| 高密市| 双牌县| 罗定市| 马尔康县| 彩票| 陕西省| 平安县| 凤冈县| 林州市| 文安县| 湘乡市| 鄂尔多斯市| 台南县| 内黄县| 大荔县| 苏尼特左旗| 钟山县| 永德县| 广元市| 莒南县| 石河子市| 临邑县| 广东省| 湟源县| 石泉县|