有趣的代码——import动态引用系列(一):初介绍

一,项目模块化

现在我们在进行项目开发的时候无法绕开的就是模块化概念,在项目模块化中,我们可能会有这样的构思,如果我有一个入口文件,然后通过入口文件引用不同的模块进行模块派发,如果可以这样实现,那么对于多类的管理是非常美好的。
所以基于这样的想法,我们发现了import动态引用

二,如何用import实现动态引用

动态引用方法:

let set = (res)=>{
    import(`./${res}`).then(item=>{
        console.log(item)
    }).catch(err=>{
        throw new Error(err)
    })
}

我们通过import()方法进行模块的局部引用,而import()将返回一个Promise,我们使用then,catch方法对Promise的返回值进行操作,而Promise成功状态返回值是一个Module实例,在其中有一个default是我们实质抛出的类,获取到我们所需的类后,我们可以在then下进行操作:

let set = (res)=>{
    import(`./${res}`).then(item=>{
        let Instance = new item.default()
    }).catch(err=>{
        throw new Error(err)
    })
}

我们在then方法中将获取到的类进行实例化,当然有的朋友不希望在Promise中对参数进行操作,他们更希望获取到Promise中的返回值,那么我们可以使用async-await。

let set = async (res)=>{
    let data = await import(`./${res}`).then(item=>{
        let Instance = new item.default()
    }).catch(err=>{
        throw new Error(err)
    })
    console.log(data)
    return data
}

当我们使用async-await的时候我们可以获取到Promise中的返回值,一切看起来如此美好,然而隐患却随之而来,如果我们在使用async-await的时候无法建立有效的洋葱模型,那么我们外层对async函数调头的时候将会获得一个Promise,这是同步与异步处理机制结合的一点问题,却恰恰是这一点问题使得我们在实际使用中会受到各种掣肘,如果我们并不是决定建立有效的洋葱模型进行动态引用,那么我非常不推荐使用async-await解决Promise返回值的问题,当然,如果我们建立了行之有效的洋葱模型,那么我们就可以进行async-await的链式引用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容

  • 原文连接:https://blog.csdn.net/sinat_17775997/article/details...
    小豆soybean阅读 4,290评论 0 7
  • 在最开始学习ES6的Promise时,曾写过一篇博文《promise和co搭配生成器函数方式解决js代码异步流程的...
    coolcao阅读 990评论 0 3
  • 透彻掌握Promise的使用,读这篇就够了 Promise的重要性我认为我没有必要多讲,概括起来说就是必须得掌握,...
    穿牛仔裤的蚊子阅读 2,189评论 0 16
  • 弄懂js异步 讲异步之前,我们必须掌握一个基础知识-event-loop。 我们知道JavaScript的一大特点...
    DCbryant阅读 2,752评论 0 5
  • 含义 async函数是Generator函数的语法糖,它使得异步操作变得更加方便。 写成async函数,就是下面这...
    oWSQo阅读 2,006评论 0 2