知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷(xiāo)的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷(xiāo)工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
您當(dāng)前位置>首頁(yè) » 新聞資訊 » 小程序相關(guān) >
微信小程序轉(zhuǎn)換器(四)—— 異步loader實(shí)現(xiàn)
發(fā)表時(shí)間:2021-1-5
發(fā)布人:葵宇科技
瀏覽次數(shù):55
loader遞歸調(diào)用修改
判斷l(xiāng)oader返回值是否為promise,是就等待promise完成,得到值,否則直接獲取返回值。
async function useLoader(source, loaders = []) {
//...省略loader過(guò)濾階段,假設(shè)loaderList = loaders
const loaderList = loaders
async function runLoader(source, loaderList) {
const loader = loaderList.pop()
let newSource
if (isPromise(loader)) newSource = await loader(source)
else newSource = loader(source)
if (loaderList.length > 0) return runLoader(newSource, loaderList)
else return newSource
}
source = await runLoader(source, loaderList)
return source
}
復(fù)制代碼
獲取loader處理結(jié)果
使用await等待異步loader返回結(jié)果。這里有個(gè)問(wèn)題,假如使用Array.prototype上的foreach方法,是一個(gè)同步方法,無(wú)法提供一個(gè)可由外部控制的異步環(huán)境,將傳入的callback進(jìn)行堵塞,因此此處采用了for-of進(jìn)行循環(huán)。
async function analyzeFileToLoard(inputPath, outputPath) {
let source = readFile(inputPath)
const loaders = config.module
for (let loader of loaders) {
if (loader.test.test(inputPath)) {
source = await useLoader(source, loader.loader, outputPath)
if (loader.outputPath) outputPath = loader.outputPath(outputPath)
}
}
writeFile(outputAppPath(outputPath), source)
}
復(fù)制代碼
改進(jìn)異步asyncForeach方法
可以用之前foreach的習(xí)慣調(diào)用。
Array.prototype.asyncForeach = async function(callBack) {
if (callBack.constructor.name !== 'AsyncFunction') throw new Error('callBack should be AsyncFunction!')
for (let i = 0; i<this.length; i ++ ) {
const item = this[i]
await callBack(item, i)
}
}
// 調(diào)用
async function analyzeFileToLoard(inputPath, outputPath) {
let source = readFile(inputPath)
const loaders = config.module
await loaders.asyncForeach(async loader => {
if (loader.test.test(inputPath)) {
const res = await useLoader(source, loader.loader, outputPath)
source = res
if (loader.outputPath) outputPath = loader.outputPath(outputPath)
}
})
writeFile(outputAppPath(outputPath), source)
}
相關(guān)案例查看更多
相關(guān)閱讀
- 云南小程序開(kāi)發(fā)費(fèi)用
- 網(wǎng)站建設(shè)公司地址
- 云南網(wǎng)站建設(shè)哪家公司好
- 云南小程序被騙蔣軍
- 花農(nóng)小程序
- 云南網(wǎng)站優(yōu)化公司
- 小程序開(kāi)發(fā)課程
- 云南網(wǎng)站建設(shè)案例
- 云南網(wǎng)站維護(hù)
- 云南網(wǎng)站建設(shè)首選
- 江蘇小程序開(kāi)發(fā)
- 小程序用戶登錄
- 報(bào)廢車(chē)拆解軟件
- 云南小程序設(shè)計(jì)
- 云南網(wǎng)站建設(shè)
- 云南小程序開(kāi)發(fā)推薦
- 小程序開(kāi)發(fā)排名前十名
- 云南網(wǎng)站建設(shè)靠譜公司
- 百度推廣
- 報(bào)廢車(chē)回收管理系統(tǒng)
- 排名
- 云南軟件定制
- 網(wǎng)站建設(shè)電話
- 旅游網(wǎng)站建設(shè)
- 霸屏推廣
- 昆明小程序開(kāi)發(fā)聯(lián)系方式
- 云南小程序開(kāi)發(fā)課程
- 高端網(wǎng)站建設(shè)公司
- 云南網(wǎng)絡(luò)營(yíng)銷(xiāo)
- 云南小程序制作