一文了解Promise使用與實現
工具與資源中心
幫助開發者更加高效的工作,提供圍繞開發者全生命週期的工具與資源
https://developer.aliyun.com/tool/?spm=a1z389.11499242.0.0.65452413TeoOSk&utm_content=g_1000295017
前言
Promise 作為一個前端必備技能,不管是從專案應用還是面試,都應該對其有所瞭解與使用。
常常遇到的面試五連問:
- 說說你對 Promise 理解?
- Promise 的出現解決了什麼問題?
- Promise 有哪些狀態?
- 你用過 Promise 哪些方法?
- 如何實現一個 Promise ?
什麼是 Promise?
Promise 是非同步程式設計的一種解決方案:從語法上講,promise 是一個物件,從它可以獲取非同步操作的訊息;從本意上講,它是承諾,承諾它過一段時間會給你一個結果。
Promise 有三種狀態: pending(等待態), fulfiled(成功態), rejected(失敗態);狀態一旦改變,就不會再變。創造 Promise 例項後,它會立即執行。
一般來說我們會碰到的回撥巢狀都不會很多,一般就一到兩級,但是某些情況下,回撥巢狀很多時,程式碼就會非常繁瑣,會給我們的程式設計帶來很多的麻煩,這種情況俗稱——回撥地獄。
這時候我們的 Promise 就應運而生、粉墨登場了。
Promise 的基本使用
Promise 是一個建構函式,自己身上有
all
、
reject
、
resolve
這幾個眼熟的方法,原型上有
then
、
catch
等同樣很眼熟的方法。
Promise 的建構函式接收一個引數:函式,並且這個函式需要傳入兩個引數:
resolve:非同步操作執行 成功後的回撥函式;
reject:非同步操作執行 失敗後的回撥函式;
catch
的用法
我們知道Promise 物件除了then 方法,還有一個catch 方法,它是做什麼用的呢?其實它和then 的第二個引數一樣,用來指定reject 的回撥。
在
resolve
的回撥中,我們
console.log(test)
,而
test
這個變數是沒有被定義的。如果我們不用 Promise,程式碼執行到這裡就直接在控制檯報錯了,不往下執行了,也就是說進到catch方法裡面去了,而且把錯誤原因傳到了
reject
引數中。即便是有錯誤的程式碼也不會報錯了,這與我們的
try/catch
語句有相同的功能。
finally
的用法
finally
方法返回一個 Promise。在 promise 結束時,無論結果是 fulfilled 或者是 rejected ,都會執行指定的回撥函式。這為在
Promise
是否成功完成後都需要執行的程式碼提供了一種方式。
resolve
的用法
Promise.resolve(value)
方法返回一個以給定值解析後的 Promise 物件。如果這個值是一個 promise ,那麼將返回這個 promise ;如果這個值是 thenable(即帶有"then" 方法),返回的promise會“跟隨”這個 thenable 的物件,採用它的最終狀態;否則返回的promise將以此值完成。此函式將類promise物件的多層巢狀展平。
本文轉自:https://developer.aliyun.com/article/791192?spm=a2c6h.12873581.0.0.6b4c767doF0yzX&groupCode=othertech
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70003733/viewspace-2792341/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一文了解 Elasticsearch 及其與 Python 的對接實現ElasticsearchPython
- 一文了解微分段應用場景與實現機制
- 一文了解Android中路由(Router)的實現Android路由
- 一文了解資料庫高可用容災方案的設計與實現資料庫
- Promise的使用及簡單實現Promise
- Promise實現Promise
- Promise 小小的總結與實現Promise
- 一文了解前端與全棧工程師!前端全棧工程師
- 從使用到原理,實現符合Promise A+規範的Promise方法Promise
- Promise核心實現Promise
- 學習Promise && 簡易實現PromisePromise
- 夯實Java基礎系列4:一文了解final關鍵字的特性、使用方法,以及實現原理Java
- 如何快速實現人臉識別通道?一文了解具體技巧
- 一文了解cookieCookie
- 一文了解MysqlMySql
- 從如何使用到如何實現一個PromisePromise
- 使用 Promise.withResolvers() 來簡化你將函式 Promise 化的實現~~Promise函式
- Promise 方法的實現Promise
- 實現一個promisePromise
- Promise 簡單實現Promise
- 實現自己的promisePromise
- Promise 程式碼實現Promise
- Promise原始碼實現Promise原始碼
- promise實現過程Promise
- promise基本實現思路Promise
- Promise進階——如何實現一個Promise庫Promise
- 你想了解的Promise,都在這裡!!Promise
- 一文講明白PromisePromise
- AI - 一文了解AIOps的含義、特點與功用AI
- Promise原理探究及實現Promise
- Es6 Promise 實現Promise
- 簡單版Promise實現Promise
- 實現promise.all方法Promise
- Promise的實現(step by step)Promise
- Promise的實現及解析Promise
- promise的模擬實現Promise
- Promise的祕密(Promise原理解析以及實現)Promise
- 實現一個Promise(基於Promise/A+規範)Promise