• 『手撕Vue-CLI』函数柯里化优化代码


    开篇

    在上一篇文章中,给 nue-cli 添加了拉取版本号的功能,这一次来优化一下代码,使用函数柯里化的方式来优化代码。

    实现

    函数柯里化

    函数柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术。

    在进行改写之前,首先给大家简单介绍一下函数柯里化,写一个简单的例子来演示一下。

    javascript
    function demo(a, b) {
        return a + b;
    }
    
    const res = demo(1, 2);
    console.log(res);

    这是一个简单的函数,接收两个参数,然后返回两个参数的和,除了这种写法其实还可以改写成这样:

    javascript
    function demo(a) {
        return function (b) {
            return a + b;
        };
    }

    这个时候呢,该如何调用呢?首先是调用 demo 方法,传入一个参数,然后返回一个函数,再调用这个函数,传入另一个参数,最后得到结果。

    javascript
    const res = demo(1)(2);
    console.log(res);

    了解了这种写法之后,就可以使用函数柯里化来优化代码了。

    优化控制台加载效果

    为什么是要优化控制台加载效果呢?因为我发现后续可能对控制台加载效果的需求会比较多,所以就把这个功能单独提取出来。

    例如像之前拉取模板名称,拉取版本号,拉取模板等等,都需要控制台加载效果,所以就把这个功能单独提取出来,以后需要的时候直接调用就可以了。

    javascript
    const waitLoading = async ( message, fn) => {
        const spinner = ora(message).start();
        const result = await fn();
        spinner.succeed(`${message} successfully`);
        return result;
    }

    这个函数接收两个参数,第一个参数是 message,第二个参数是 fnmessage 是控制台加载效果的提示信息,fn 是一个异步函数,这个函数会返回一个 Promise 对象,然后在函数内部调用 ora,显示加载效果,然后调用 fn,等待 fn 执行完毕,最后关闭加载效果。

    改造获取模板名称

    主要就是将 fetchRepoList 中通过 ora 显示加载效果的代码删除掉,然后调用 waitLoading 函数,将 fetchRepoList 传入进去,这样就改造完成了。

    javascript
    const fetchRepoListData = await waitLoading('downloading template names...', fetchRepoList)();

    改造获取版本号

    这里改造其实是一样的,不过这里有一个小问题,就是 getTemplateTags 这个函数是需要传入一个参数的,所以需要对 waitLoading 进行改造。

    javascript
    const waitLoading =  ( message, fn) => async (...args) => {
        const spinner = ora(message).start();
        const result = await fn(...args);
        spinner.succeed(`${message} successfully`);
        return result;
    }

    这回的 waitLoading 方法与之前的不同地方就是在添加了一个 ...args 参数,这个参数是用来接收 fn 函数的参数的,然后在调用 fn 的时候将参数传入进去。

    接下来就是改造调用 getTemplateTags 的地方了。

    javascript
    const fetchTemplateTags = await waitLoading('downloading template tags...', getTemplateTags)(template);

    由于改造了 waitLoading 方法,之前调用 waitLoading 方法的地方也需要进行改造,就是多加一个调用过程。

    好,大致就是这样,本篇文章就到这里了,下一篇文章继续完善 nue-cli。


    __EOF__

  • 本文作者: BNTang
  • 本文链接: https://www.cnblogs.com/bntang/p/18223507
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    【图解源码】Zookeeper3.7源码分析,包含服务启动流程源码、网络通信源码、RequestProcessor处理请求源码
    含文档+PPT+源码等]精品基于Uniapp+SSM实现的记账app[包运行成功]计算机毕业设计Android项目源码
    ES7升级、jar包升级、工具类封装,代码改造
    postgresql|数据库|提升查询性能的物化视图解析
    恒生电子,快手25届实习内推
    链表经典面试题(一)
    【手写协程】带你从底层实现一个最小协程调度器
    非零基础自学Java (老师:韩顺平) 第6章 数组、排序和查找 6.14 二维数组的应用案例 && 6.15 二维数组使用细节和注意事项
    10年软件测试工程师经验,很茫然....
    W5500模块PHY连接问题
  • 原文地址:https://www.cnblogs.com/BNTang/p/18223507