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