摘要:基本概念是中新增的異步編程解決方案,體現(xiàn)在代碼中它是一個對象,可以通過構(gòu)造函數(shù)來實(shí)例化。只要期中有一個被,的狀態(tài)就變成,此時(shí)第一個被的實(shí)例的返回值,會傳遞給的回調(diào)函數(shù)。
Promise
基本概念:
Promise:是ES6中新增的異步編程解決方案,體現(xiàn)在代碼中它是一個對象,可以通過Promise 構(gòu)造函數(shù)來實(shí)例化。
new Promise(cb)
三種狀態(tài):Pending、 Resolved、Rejected
兩個原型方法:
Promise.prototype.then()
Promise.prototype.catch()
兩個常用的靜態(tài)方法:
Promise.all() // 可以將多個Promise實(shí)例包裝成一個新的Promise實(shí)例
當(dāng)所有Promise實(shí)例的狀態(tài)都變成resolved,Promise.all的狀態(tài)才會變成resolved,此時(shí)返回值組成一個數(shù)組,傳遞給then中的resolve函數(shù)。
只要期中有一個被rejected,Promise.all的狀態(tài)就變成rejected,此時(shí)第一個被rejected的實(shí)例的返回值,會傳遞給p的回調(diào)函數(shù)。
Promise.resolve()
Pending ====> Resolved(已完成)
Pending ====> Rejected(已失敗)
console.log(1) const p = new Promise(function(resolve, reject){ const img = new Image(); img.src = ""; img.onload = function(){ resolve(this); } img.onerror = function(){ reject(new Error("圖片加載失敗")); } }) p.then(function(img){ document.body.appendChild(img); }, function(err){ console.log(err) }) //第一個參數(shù)是執(zhí)行成功的,第二個函數(shù)是執(zhí)行失?。ㄒ话悴煌扑]第二個參數(shù),采用catch) console.log(2) p.catch(function(err){ console.log(err) }) // 1 2 error(異步,不影響后面加載) var imgs = ["a.jpg", "b.jpg", "c.jpg"] function loadImg(url){ const p = new Promise(function(resolve, reject){ const img = new Image(); img.src = ""; img.onload = function(){ resolve(this); } img.onerror = function(){ reject(new Error("圖片加載失敗")); } }) return p; } const allDone = Promise.all([loadImg(imgs[0])], [loadImg(imgs[1])], [loadImg(imgs[2])]); allDone.then(function(data){ console.log(data) // data 就是一組數(shù)組 }).catch(function(err){ console.log(err) // })
Promise.resolve()三種用法
//參數(shù)是Promise實(shí)例,將不做任何修改、原封不動的返回這個實(shí)例
Promise.resolve(loadImg(imgs[0]).then(function(data){ console.log(data) // })
//將對象轉(zhuǎn)為Promise對象,然后就立即執(zhí)行thenable對象的then方法
Promise.resolve({ then(resolve, reject){ const img = new Image(); img.src = imgs[0]; img.onload = function (){ resolve(this) } } }).then(function(data){ })
//參數(shù)是一個基本數(shù)據(jù)類型或者不傳參數(shù) ,那么返回一個狀態(tài)為resolved的Promise對象
Promise.resolve("abc").then(function(str){ console.log(str); //abc }) const p = Promise.resolve(); console.log(p)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/94224.html
摘要:的翻譯文檔由的維護(hù)很多人說,阮老師已經(jīng)有一本關(guān)于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會promise...... 本書的目的是以目前還在制定中的ECMASc...
摘要:和和都有和,但是略有不同。實(shí)際上返回的是一個對象。和添加的回調(diào),添加的回調(diào)。所以在調(diào)用成功的情況下執(zhí)行添加的回調(diào),調(diào)用失敗時(shí)執(zhí)行添加的回調(diào)。,產(chǎn)生對象并,產(chǎn)生對象并,然后繼續(xù)處理,的語法糖,和的差不多但不同。 Deferred 和 Promise ES6 和 jQuery 都有 Deffered 和 Promise,但是略有不同。不過它們的作用可以簡單的用兩句話來描述 Deffere...
摘要:所謂異步編程中的異步是相對于同步的概念的。是一系列異步編程規(guī)范的統(tǒng)稱。如果中的回調(diào)函數(shù)返回一個值,那么返回的將會成為接受狀態(tài),并且將返回的值作為接受狀態(tài)的回調(diào)函數(shù)的參數(shù)值。參考介紹基礎(chǔ)篇深入理解與異步編程。 es6 promise與異步編程 對于一些還不具備大量編程經(jīng)驗(yàn)的朋友來說,promise可能是es6比較難以掌握的點(diǎn)。首先是很多名詞,比如Promises,es6 Promise,...
摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。寫一個符合規(guī)范并可配合使用的寫一個符合規(guī)范并可配合使用的理解的工作原理采用回調(diào)函數(shù)來處理異步編程。 JavaScript怎么使用循環(huán)代替(異步)遞歸 問題描述 在開發(fā)過程中,遇到一個需求:在系統(tǒng)初始化時(shí)通過http獲取一個第三方服務(wù)器端的列表,第三方服務(wù)器提供了一個接口,可通過...
摘要:如果有錯誤,則到的第二個回調(diào)函數(shù)中,對錯誤進(jìn)行處理。假設(shè)第一個的第一個回調(diào)沒有返回一個對象,那么第二個的調(diào)用者還是原來的對象,只不過其的值變成了第一個中第一個回調(diào)函數(shù)的返回值。 ES6標(biāo)準(zhǔn)出爐之前,一個幽靈,回調(diào)的幽靈,游蕩在JavaScript世界。 正所謂: 世界本沒有回調(diào),寫的人多了,也就有了})})})})})。 Promise的興起,是因?yàn)楫惒椒椒ㄕ{(diào)用中,往往會出現(xiàn)回調(diào)函數(shù)一...
摘要:就算改變已經(jīng)發(fā)生了,即使再對對象添加回調(diào)函數(shù),也會立即得到這個結(jié)果。方法接收個參數(shù),第一個參數(shù)是狀態(tài)的回調(diào)函數(shù),第二個參數(shù)可選是狀態(tài)的回調(diào)函數(shù)。簡單來講,就是能把原來的回調(diào)寫法分離出來,在異步操作執(zhí)行完后,用鏈?zhǔn)秸{(diào)用的方式執(zhí)行回調(diào)函數(shù)。 在ECMAScript 6標(biāo)準(zhǔn)中,Promise被正式列為規(guī)范,Promise,字面意思就是許諾,承諾,嘿,聽著是不是很浪漫的說?我們來探究一下這個浪...
閱讀 3241·2021-11-19 09:40
閱讀 1634·2021-11-15 11:39
閱讀 730·2021-10-08 10:05
閱讀 2346·2021-09-03 10:29
閱讀 3465·2021-08-12 13:22
閱讀 2313·2019-08-30 15:54
閱讀 3777·2019-08-30 14:03
閱讀 2703·2019-08-30 13:45