欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

微信小程序轉(zhuǎn)換器(四)—— 異步loader實(shí)現(xiàn) - 新聞資訊 - 云南小程序開(kāi)發(fā)|云南軟件開(kāi)發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開(kāi)發(fā)/軟件開(kāi)發(fā)

知識(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)案例查看更多