摘要:首先,我們?yōu)槭裁匆谜Z(yǔ)法作為替代回調(diào)函數(shù)執(zhí)行,作為異步操作的處理方法之一,是解決異步執(zhí)行時(shí)候回調(diào)函數(shù)嵌套回調(diào)函數(shù)這一問(wèn)題的方法,它更簡(jiǎn)潔地控制函數(shù)執(zhí)行流程一般有三種狀態(tài)等待態(tài),成功態(tài),失敗態(tài)常見(jiàn)寫(xiě)法為通常,我們處理異步請(qǐng)求,會(huì)使用回調(diào)函數(shù)嵌
首先,我們為什么要用Promise語(yǔ)法?
Promise作為替代回調(diào)函數(shù)執(zhí)行,作為異步操作的處理方法之一,是解決JS異步執(zhí)行時(shí)候回調(diào)函數(shù)嵌套回調(diào)函數(shù)這一問(wèn)題的方法,它更簡(jiǎn)潔地控制函數(shù)執(zhí)行流程
一般promise有三種狀態(tài):pending(等待態(tài)),fulfiled(成功態(tài)),rejected(失敗態(tài));
常見(jiàn)寫(xiě)法為:
let p = ?new Promise(resolve, reject){}.then();
通常,我們處理異步請(qǐng)求,會(huì)使用回調(diào)函數(shù)嵌套回調(diào)函數(shù)
例如:
fn("a", function(a) { fn1("b", function(b) { fn2("c", function(c) { fn3("d", function(d) { alert("回調(diào)成功,結(jié)果為:"a+b+c+d") }) }) }) })
但我們發(fā)現(xiàn)這樣寫(xiě)的代碼可讀性并不高
如果使用promise語(yǔ)法,則更加符合閱讀習(xí)慣,只需要在then函數(shù)中寫(xiě)處理邏輯即可
new Promise(function(resolve , reject) { resolve(1); }).then(function(val) { console.log(val); return new Promise(function(resolve , reject) { resolve(2); }); }).then(function(val) { console.log(val); return new Promise(function(resolve , reject) { resolve(3); }); }).then(function(val) { console.log(val); return new Promise(function(resolve , reject) { resolve(4); }); }).then(function(val) { console.log(val); });
運(yùn)行結(jié)果為:
接下來(lái)模擬在實(shí)際項(xiàng)目開(kāi)發(fā)中,在異步請(qǐng)求完數(shù)據(jù)后處理數(shù)據(jù)的情況,我們?cè)谶@里用settimeout來(lái)模擬異步請(qǐng)求
let mypromise = new Promise(function(resolve, reject){ setTimeout(function(){ resolve("成功!"); }, 1000); }); mypromise.then(function(successMessage){ console.log(successMessage); });
運(yùn)行結(jié)果為:
我們可以看到這里的“成功!”在運(yùn)行一秒后執(zhí)行
常用API
(1) new Promise
new Promise(function(resolve, reject){ });
(2) PromiseObj.then(resolveFn,rejectFn)
resolveFn:Promise對(duì)象成功的回調(diào)處理函數(shù)
rejectFn:Promise對(duì)象失敗的回調(diào)處理函數(shù)
new Promise((resolve,reject)=>{ }).then((resolveData)=>{ },(rejectErr)=>{ })
(3) PromiseObj.catch()
new Promise((resolve,reject)=>{ }).catch(err=>{ console.log(err) })
(4)PromiseObj.resolve()
Promise.resolve(123).then(data=>{ console.log(data) })
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/105213.html
摘要:的翻譯文檔由的維護(hù)很多人說(shuō),阮老師已經(jīng)有一本關(guān)于的書(shū)了入門(mén),覺(jué)得看看這本書(shū)就足夠了。前端的異步解決方案之和異步編程模式在前端開(kāi)發(fā)過(guò)程中,顯得越來(lái)越重要。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(shū)(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書(shū)的目的是以目前還在制定中的ECMASc...
摘要:和和都有和,但是略有不同。實(shí)際上返回的是一個(gè)對(duì)象。和添加的回調(diào),添加的回調(diào)。所以在調(diào)用成功的情況下執(zhí)行添加的回調(diào),調(diào)用失敗時(shí)執(zhí)行添加的回調(diào)。,產(chǎn)生對(duì)象并,產(chǎn)生對(duì)象并,然后繼續(xù)處理,的語(yǔ)法糖,和的差不多但不同。 Deferred 和 Promise ES6 和 jQuery 都有 Deffered 和 Promise,但是略有不同。不過(guò)它們的作用可以簡(jiǎn)單的用兩句話來(lái)描述 Deffere...
摘要:從最開(kāi)始的到封裝后的都在試圖解決異步編程過(guò)程中的問(wèn)題。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。寫(xiě)一個(gè)符合規(guī)范并可配合使用的寫(xiě)一個(gè)符合規(guī)范并可配合使用的理解的工作原理采用回調(diào)函數(shù)來(lái)處理異步編程。 JavaScript怎么使用循環(huán)代替(異步)遞歸 問(wèn)題描述 在開(kāi)發(fā)過(guò)程中,遇到一個(gè)需求:在系統(tǒng)初始化時(shí)通過(guò)http獲取一個(gè)第三方服務(wù)器端的列表,第三方服務(wù)器提供了一個(gè)接口,可通過(guò)...
摘要:所謂異步編程中的異步是相對(duì)于同步的概念的。是一系列異步編程規(guī)范的統(tǒng)稱。如果中的回調(diào)函數(shù)返回一個(gè)值,那么返回的將會(huì)成為接受狀態(tài),并且將返回的值作為接受狀態(tài)的回調(diào)函數(shù)的參數(shù)值。參考介紹基礎(chǔ)篇深入理解與異步編程。 es6 promise與異步編程 對(duì)于一些還不具備大量編程經(jīng)驗(yàn)的朋友來(lái)說(shuō),promise可能是es6比較難以掌握的點(diǎn)。首先是很多名詞,比如Promises,es6 Promise,...
摘要:如果有錯(cuò)誤,則到的第二個(gè)回調(diào)函數(shù)中,對(duì)錯(cuò)誤進(jìn)行處理。假設(shè)第一個(gè)的第一個(gè)回調(diào)沒(méi)有返回一個(gè)對(duì)象,那么第二個(gè)的調(diào)用者還是原來(lái)的對(duì)象,只不過(guò)其的值變成了第一個(gè)中第一個(gè)回調(diào)函數(shù)的返回值。 ES6標(biāo)準(zhǔn)出爐之前,一個(gè)幽靈,回調(diào)的幽靈,游蕩在JavaScript世界。 正所謂: 世界本沒(méi)有回調(diào),寫(xiě)的人多了,也就有了})})})})})。 Promise的興起,是因?yàn)楫惒椒椒ㄕ{(diào)用中,往往會(huì)出現(xiàn)回調(diào)函數(shù)一...
摘要:盡管可以讓代碼更加簡(jiǎn)潔易讀,但對(duì)于只熟悉回調(diào)函數(shù)的人來(lái)說(shuō),可能對(duì)此還是會(huì)有所懷疑。始終避免在或使用回調(diào)函數(shù),否則會(huì)吞噬任何后續(xù)的錯(cuò)誤,將其作為鏈的一部分。然而,使用回調(diào)函數(shù),使用所謂的,即第一個(gè)參數(shù)是一個(gè)錯(cuò)誤回調(diào)變得很常見(jiàn)。 原文:ES6 Promises: Patterns and Anti-Patterns作者:Bobby Brennan 當(dāng)幾年前,第一次使用 NodeJS 的時(shí)候...
閱讀 4025·2021-11-22 13:52
閱讀 3869·2019-12-27 12:20
閱讀 2563·2019-08-30 15:55
閱讀 2324·2019-08-30 15:44
閱讀 2413·2019-08-30 13:16
閱讀 732·2019-08-28 18:19
閱讀 2064·2019-08-26 11:58
閱讀 3621·2019-08-26 11:47