javascript - 有一個(gè)異步獲取數(shù)據(jù)的函數(shù)A,其他依賴這個(gè)A得到的數(shù)據(jù)的函數(shù)是否都必須是異步的?
問(wèn)題描述
現(xiàn)在是這樣,函數(shù)a是Promise異步返回?cái)?shù)據(jù),其他很多函數(shù)需要用到這個(gè)數(shù)據(jù),我現(xiàn)在是每個(gè)依賴這個(gè)數(shù)據(jù)的函數(shù)都要a().then()這樣處理
function a() { return new Promise((resolve, reject) => { .... })}function getsub(id) { return a() .then((data) => {return ..... }) .catch((err) => {...})}function tree(id) { return a() .then((data) => {return ..... }) .catch((err) => {...})}
其中有一些遞歸循環(huán)依賴,復(fù)雜度增加后我感覺(jué)我要瘋了,有沒(méi)有其他好點(diǎn)的寫法啊?
問(wèn)題解答
回答1:可以用點(diǎn)函數(shù)式編程的寫法:
function mapData(call) { return () => a() .then((data) => call(data)) .catch((err) => call(null, err))}function sub(data, err) { ... }function sub2(data, err) { ... }function sub3(data, err) { ... }const getsub = mapData(sub)const getsub2 = mapData(sub2)const getsub3 = mapData(sub3)回答2:
嘗試一下 ES7 的 async/await ?或者 引入 async.js 庫(kù),前后端通用。
回答3:如果實(shí)時(shí)性和獨(dú)立性要求都很高,那好像是沒(méi)什么辦法...不然可以嘗試緩存a...看看其他人怎么說(shuō)

網(wǎng)公網(wǎng)安備