在實際開發(fā)中,相信小伙伴們都碰到過接口的串行調(diào)用以及并行調(diào)用,而并行調(diào)用又有兩種,一種是只需最先返回的結(jié)果即可,這種比較少見,有時候接口變遷,為了平緩過渡,方便容錯才會出現(xiàn);另一種則是需要所有請求的接口數(shù)據(jù)才能進行下一步,這種比較常見,如賬號可用余額是否可以購買商品等。
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、羅平網(wǎng)絡(luò)推廣、小程序制作、羅平網(wǎng)絡(luò)營銷、羅平企業(yè)策劃、羅平品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供羅平建站搭建服務(wù),24小時服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com普通的Ajax請求
在前端遠古時代,碰到以上情況,串行通過嵌套調(diào)用來處理,并行通過判斷是否均完成請求的方式來處理。
但是這樣子處理實際上并不能說符合預(yù)期。首先,嵌套調(diào)用的方式,如果里面再涉及到其他回調(diào)的話,滿滿的回調(diào)地獄即視感。其次,判斷請求狀態(tài)的方式,每個接口的回調(diào)都要做判斷,并行的接口越多,判斷的條件越多,代碼冗余的越厲害。
Promise異步處理
為了解決回調(diào)地獄的問題,ES6將Promise寫進了語言標準并統(tǒng)一了用法。Promise的鏈式調(diào)用、race、all方法可以大大改善嵌套調(diào)用以及并行調(diào)用的問題,并得以解決。
但是Promise本身是無法取消的,在用于http請求時,會引發(fā)兩個無法忽視的問題:
●在單頁面應(yīng)用中,resolve回調(diào)里需要進行try/catch處理,特別是在回調(diào)里有DOM操作的時候。否則,在接口響應(yīng)慢的時候進行路由切換會導(dǎo)致控制臺報錯,甚至導(dǎo)致頁面陷入無法交互的境地。
●由于接口響應(yīng)慢而導(dǎo)致的競態(tài)條件問題。
而相比之下,rxjs能解決以上所有問題。
rxjs數(shù)據(jù)流
rxjs可以說是一套針對數(shù)據(jù)流的函數(shù)響應(yīng)式編程,有著極其強大而豐富的操作符,可以將所有數(shù)據(jù)抽象成數(shù)據(jù)流的形式,使開發(fā)者能以同步編程的方式來進行處理。
首先,在串、并行調(diào)用接口時,先利用操作符將數(shù)據(jù)來源進行處理,然后訂閱即可。
其次,rxjs是可以取消的,對于Promise出現(xiàn)的兩個問題:
●在切換路由,組件銷毀時調(diào)用unsubscribe方法取消訂閱,回調(diào)里的邏輯便不會執(zhí)行。
●競態(tài)條件是由于接口異步調(diào)用的回調(diào)順序不可控導(dǎo)致的,rxjs的switchMap操作符可以確保每次接收到的都是最新一次發(fā)送的值(即最新的接口回調(diào)的值)。
睿江云計算官網(wǎng):http://www.eflycloud.com/home?from=RJ_0027
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。