第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

ES6里的Promise改進(jìn)是重大的嗎?

ES6里的Promise改進(jìn)是重大的嗎?

德瑪西亞99 2019-04-16 20:25:36
ES6的細(xì)節(jié)披露的越來越多了,最近聽說里面增加了一個(gè)Promise特性,我去翻了下這個(gè)關(guān)鍵字,貌似在js上有很多實(shí)現(xiàn)了,那么es6的原生實(shí)現(xiàn)有什么不同?它的具體作用是什么呢?就是為了解決異步嵌套的問題嗎?
查看完整描述

2 回答

?
侃侃無極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

ES6的Promises是采用了Promises/A+提案的一種實(shí)現(xiàn)。你現(xiàn)在能夠找到的各種第三方實(shí)現(xiàn),如果是完全兼容了Promises/A+的,那么就和ES6的Promises是一致的(當(dāng)然了,第三方實(shí)現(xiàn)可能會(huì)增加更多的API,而ES6的實(shí)現(xiàn)只需要符合Promises/A+提案的最基本要求即可)。
Promises是一種模式,它能夠讓異步操作變得看起來更像是同步的,無論是寫起來還是讀起來都會(huì)更愉悅更輕松一些。基本上它是把延續(xù)傳遞風(fēng)格(Continuation-passingstyle)的代碼,比如:
doSomeAsync("url",function(err,results){
//在延續(xù)傳遞的回調(diào)函數(shù)里處理err,或者處理results
});
變成返回值的形式:
varpromise=doSomeAsync("url")
這個(gè)返回的對(duì)象就是一個(gè)Promises對(duì)象,它代表著異步操作的結(jié)果:可能是成功的獲取到某些數(shù)據(jù),也可能是失敗返回的狀態(tài)和信息。在我們獲得Promises對(duì)象的那一刻我們并無法知道具體是什么,但是只要異步操作完成,Promises對(duì)象必然會(huì)有一個(gè)確定狀態(tài)(所以才叫Promises,也就是“許諾,承諾”)。我們甚至不需要去查詢這個(gè)狀態(tài),只需要告訴它要做什么就可以了。
貌似延續(xù)傳遞的毀掉函數(shù)也能做到上述這些?沒錯(cuò)。但是Promises的意義就在于它把未來的結(jié)果作為一個(gè)對(duì)象返回給你,你可以用同步的方式來寫代碼處理它,比如說作為參數(shù)傳遞,比如說聚合多個(gè)Promises操作等等。
解決異步嵌套并非Promises的目的,而是使用Promises后得到的一個(gè)副作用——當(dāng)然是好的副作用。Promises真正的意義在于集中化處理異常。
什么意思呢?考慮一下同步函數(shù),它的特點(diǎn)是要么返回值,要么拋出異常。返回的值可以繼續(xù)傳遞給別的函數(shù)做進(jìn)一步處理,而異常則可以在調(diào)用棧的某一層被捕獲并處理。我們總認(rèn)為異步回調(diào)的問題在于嵌套過深,然而嵌套只是表象,真正的難點(diǎn)在于你無法讓異步回調(diào)統(tǒng)一處理返回值或異常,所以才不得不嵌套起來。
Promises把異步操作的結(jié)果變成對(duì)象返回出來并可以進(jìn)一步處理,這就好像同步函數(shù)的經(jīng)典行為,于是才可能有這樣的異步處理:
varpromise=doSomeAsync("url");
promise
.then(doOneThingAsync)
.then(doAnotherThingAsync)
.then(doFinalThing)
.catch(dealWithAnyErrors);
鏈?zhǔn)秸{(diào)用的最后一個(gè).catch,它可以處理前面三步中拋出的任意異常,這才是Promises的精髓:把異步操作同步化,因而不用嵌套回調(diào)函數(shù)并且能夠集中處理異常。
補(bǔ)充一點(diǎn),jQuery里實(shí)現(xiàn)的Promises是有問題的(和Promises/A+比較),而且問題比較嚴(yán)重。如果你希望使用Promises的習(xí)慣以及相關(guān)的API符合未來的ES6,那么請(qǐng)不要視jQuery的實(shí)現(xiàn)或行為是“正確的”,甚至根據(jù)jQuery核心成員的描述,這些問題將永遠(yuǎn)得不到解決(在jQuery中,出于向后兼容的考慮)。
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-16
  • 2 回答
  • 0 關(guān)注
  • 445 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)