摘要:相信大家工作中調(diào)用接口的情況很常見(jiàn),有時(shí)候會(huì)有這樣的需求進(jìn)入頁(yè)面需要多個(gè)接口調(diào)用結(jié)束后,才能讓用戶(hù)進(jìn)行操作而這幾個(gè)接口本身并沒(méi)有先后順序的要求。最終判斷所有變量值都為。
相信大家工作中調(diào)用接口的情況很常見(jiàn),有時(shí)候會(huì)有這樣的需求:進(jìn)入頁(yè)面需要多個(gè)接口調(diào)用結(jié)束后,才能讓用戶(hù)進(jìn)行操作!而這幾個(gè)接口本身并沒(méi)有先后順序的要求。你會(huì)怎么做?
1、儲(chǔ)存變量方法因?yàn)榻涌谡{(diào)用是異步行為,所以我們可以在調(diào)用成功的回調(diào)函數(shù)中標(biāo)記不同的變量(默認(rèn)值都設(shè)置為false),等到當(dāng)前接口完的時(shí)候,會(huì)把當(dāng)前變量設(shè)置為true。最終判斷所有變量值都為true。很明顯這樣會(huì)需要很多全局變量,而且很復(fù)雜。所以不推薦使用。
ES6 promise方法我們都知道使用fetch調(diào)用接口會(huì)返回一個(gè)Promise實(shí)例,因此我們模擬一個(gè)Promise異步返回:
const wait = ms => new Promise((resolve, reject) => { setTimeout(() => { console.log(`wait ${ms}ms`) resolve(`wait ${ms}ms`) }, ms) }) const PA = Promise.all([wait(3000), wait(1000), wait(2000)]) // 依次打?。簑ait 1000ms wait 2000ms wait 3000ms //PA => Promise {} PA.then(res => console.log(res))
通過(guò)上面Promise.all執(zhí)行結(jié)果可以看出來(lái),返回了一個(gè)新的Promise實(shí)例,可以通過(guò).then回調(diào)處理,但是看起也是不太優(yōu)雅!
配合ES7 async/await方法ES7為處理異步方法提供Generator的語(yǔ)法糖寫(xiě)法async/await方法。
但是,如果僅僅使用await的方法,接口會(huì)被阻塞,即執(zhí)行順序變成了同步的效果了;所以,通過(guò)await + Promise的方法寫(xiě)起來(lái)十分優(yōu)雅、簡(jiǎn)潔。
const wait = ms => new Promise((resolve, reject) => { setTimeout(() => { console.log(`wait ${ms}ms`) resolve(`wait ${ms}ms`) }, ms) }) ;(async () => { const PA = await Promise.all([wait(3000), wait(1000), wait(2000)]) // 依次打印:wait 1000ms wait 2000ms wait 3000ms console.log(PA) })() //wait 1000ms //wait 2000ms //wait 3000ms //["wait 3000ms", "wait 1000ms", "wait 2000ms"]
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/105631.html
摘要:函數(shù)式編程與面向?qū)ο缶幊叹幊痰谋举|(zhì)之劍目錄編程的本質(zhì)讀到兩篇文章寫(xiě)的不錯(cuò)綜合摘錄一下復(fù)合是編程的本質(zhì)函數(shù)式程序員在洞察問(wèn)題方面會(huì)遵循一個(gè)奇特的路線。在面向?qū)ο缶幊讨?,?lèi)或接口的聲明就是表面。 函數(shù)式編程與面向?qū)ο缶幊蘙5]:編程的本質(zhì) 之劍 2016.5.6 01:26:31 編程的本質(zhì) 讀到兩篇文章,寫(xiě)的不錯(cuò), 綜合摘錄一下 復(fù)合是編程的本質(zhì) 函數(shù)式程序員在洞察問(wèn)題方面會(huì)遵循...
摘要:包括等,它們共同維護(hù)了一個(gè)事件與事件處理器的映射表,用來(lái)處理各個(gè)事件。例如內(nèi)部包含一個(gè)中央異步調(diào)度器,并注冊(cè)了等一系列事件事件處理器,由中央異步調(diào)度器統(tǒng)一管理和調(diào)度。當(dāng)狀態(tài)機(jī)轉(zhuǎn)換到最終狀態(tài)時(shí),則退出。 大數(shù)據(jù)夢(mèng)工廠( 0011 - YARN核心設(shè)計(jì)解析)1 - YARN RPC架構(gòu)設(shè)計(jì)YARN RPC Serv...
摘要:如何創(chuàng)建并使用。正如我們所預(yù)料到的那樣,使用來(lái)進(jìn)行大文件的讀取顯然是錯(cuò)誤的。使用進(jìn)行壓縮文件我們必須修復(fù)我們的應(yīng)用程序,并使其處理大文件的最簡(jiǎn)單方法是使用的。確切地說(shuō),由返回的流。 本系列文章為《Node.js Design Patterns Second Edition》的原文翻譯和讀書(shū)筆記,在GitHub連載更新,同步翻譯版鏈接。 歡迎關(guān)注我的專(zhuān)欄,之后的博文將在專(zhuān)欄同步: En...
摘要:協(xié)作方式在高并發(fā)場(chǎng)景中,必須要讓服務(wù)器同時(shí)維護(hù)大量請(qǐng)求連接,可能是一個(gè)服務(wù)進(jìn)程創(chuàng)建另一個(gè)進(jìn)程,也可能是一個(gè)服務(wù)線程去創(chuàng)建另一個(gè)線程,但連接結(jié)束后進(jìn)程或線程就銷(xiāo)毀了,這是一個(gè)巨大的浪費(fèi)一個(gè)自然的想法就是通過(guò)創(chuàng)建一個(gè)進(jìn)程線程池從而達(dá)到資源復(fù)用, showImg(https://segmentfault.com/img/bVbtgn1?w=313&h=208); 協(xié)作方式 在高并發(fā)場(chǎng)景中,必...
摘要:將開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境的差異降至最低,并使用持續(xù)交付實(shí)施敏捷開(kāi)發(fā)。可以在工具架構(gòu)和開(kāi)發(fā)流程不發(fā)生明顯變化的前提下實(shí)現(xiàn)擴(kuò)展。我們的初衷是分享在現(xiàn)代軟件開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)的一些系統(tǒng)性問(wèn)題,并加深對(duì)這些問(wèn)題的認(rèn)識(shí)。 簡(jiǎn)介 如今,軟件通常會(huì)作為一種服務(wù)來(lái)交付,它們被稱(chēng)為網(wǎng)絡(luò)應(yīng)用程序,或軟件即服務(wù)(SaaS)。12-Factor 為構(gòu)建如下的 SaaS 應(yīng)用提供了方法論: 使用標(biāo)準(zhǔn)化流程自動(dòng)配置,從...
閱讀 2110·2021-10-08 10:04
閱讀 3150·2021-09-22 10:02
閱讀 2396·2019-08-30 15:56
閱讀 884·2019-08-30 15:54
閱讀 989·2019-08-30 15:54
閱讀 1350·2019-08-30 15:53
閱讀 2572·2019-08-30 11:21
閱讀 3616·2019-08-30 10:56