美文网首页
2018-03-11 上课摘要

2018-03-11 上课摘要

作者: TinyScript | 来源:发表于2018-03-12 16:38 被阅读0次

    今天的课主要讲了callback与正则表达式。

    callback

    callback:主要是callback hell的历史问题与callback hell的解决方案

    error-first:node异步回调规范,将error参数作为第一位。

    // error-first 函数
    (err, value) => {
    
    }
    

    util.callbackify:接收一个async函数(或者接收返回一个Promise对象那个的函数),并返回一个遵循error-first回调风格的函数。

    const util = require('util');
    // async function:
    async function fn() {
      return 'hello world!';
    }
    const callback = util.callbackify(fn);
    
    callback((err, ret) => {
      if(err) throw err;
      console.log(ret);
    })
    
    // Promise function:
    function fn() {
      return Promise.reject(null);
    }
    
    const callback = util.callbackify(fn);
    
    callback((err, ret) => {
      err && err.hasOwnProperty('reason') && err.reason === null;
    })
    

    生成器generator function,符合可迭代协议迭代器协议

    // function* 生成器函数
    function* gen() {
      yield 1;
      yield 2;
      yield 3;
    }
    
    let g = gen();
    
    // 返回一个yield表达式生成的值
    Generator.prototype.next()
    // 返回给定值,并结束生成器
    Generator.prototype.return()
    // 向生成器抛出一个错误
    Generator.prototype.throw()
    
    // 常用方法
    g.next().value; // 当前yield的值
    g.next().done; // 迭代器是否结束
    

    es6新标准Promise + async/await

    function resolveAfter2000ms() {
      return new Promise((resolve, reject) => {
        setTimetout(() => { resolve('1') }, 2000)
      })
    }
    
    async function asyncCall() {
      console.log('calling asyncCall: ');
      // 执行asyncCall函数,会返回resolveAfter2000ms函数的值。
      // 但是在asyncCall函数中执行的resolveAfter2000ms函数,则会返回resolve的值。
      var result = await resolveAfter2000ms();
      console.log(result);
    }
    

    promisify: 接收一个error-first格式的函数,并返回一个Promise格式的对象。

    const util = require('util');
    const fs = require('fs');
    
    // fs.stat满足最后一个参数是callback并且满足first-error的函数
    const stat = util.promisify(fs.stat);
    
    // promise风格
    stat('.').then((stats) => {
      // do something
    }).catch((err) => {
      // alert error
    })
    
    // async/await风格
    async function callStat() {
      var stats = await stat('.');
      console.log(stats);
    }
    

    关于 管道 & Stream
    其实这部分并没有完全吃透,看的内容也主要是解耦KISS拼装。主要是为了程序的灵活和模拟日常生活中的零件化。说白了就是跟插座一样,你一开始插的风筒,后面拔了插电热水壶,完全是不受影响,可以正常使用的。


    正则表达式

    关于 正则表达式
    主要讲了历史以及匹配字符的用法。

    元字符
    .:匹配 除换行符 以外的 任意字符
    \w:匹配 字母数字下划线
    \W:匹配不是 字母数字下划线 的字符。
    \d:匹配 数字,相当于 [0-9]
    \D:匹配 非数字 的字符。
    \s:匹配任意 不可见字符,包括 空格制表符换行符 等。
    \S:匹配任意 可见字符
    ^:匹配字符串的 开始位置
    $:匹配字符串的 结束位置

    量词
    *:重复 任意次,相当于 {0,}
    ?:重复 0次1次,相当于 {0,1}
    +:重复 1次更多次,相当于 {1,}
    {n}:重复 n次
    {n,}:重复 n次 或者 大于n次
    {n,m}:重复 n 到 m 次

    分支 & 字符集
    分支(a|b|c)
    字符集:符号为 [abc] === [a-c][^abc] === [^a-c]

    分组 & 引用
    分组:符号为 ()
    分组例子/(\d{4})-(\d{2})-(\d{2})/,一共3个括号,分了三组。

    /(\d{4})-(\d{2})-(\d{2})/.match('2018-03-12');
    // 会得到1个完整的匹配和3个分组。
    // '2018-03-12'  =>   完整的匹配
    // '2018'        =>   第一个分组
    // '03'          =>   第二个分组
    // '12'          =>   第三个分组
    

    引用:默认为 \+数字,比如 \1 or \2 or \3
    引用例子/(\d{4})-(\d{2})-\2/,一共2个括号,1个引用,这里要注意,引用第2个,就必须匹配跟第2个引用一模一样的值。

    /(\d{4})-(\d{2})-\2/.match('2018-03-03');
    => true
    
    /(\d{4})-(\d{2})-\2/.match('2018-03-04');
    /(\d{4})-(\d{2})-\2/.match('2018-03-02');
    /(\d{4})-(\d{2})-\2/.match('2018-03-11');
    /(\d{4})-(\d{2})-\2/.match('2018-03-12');
    => false
    

    零宽断言环视lookaround assertions
    可在当前位置 向前 或者 向后 匹配,并且 不占字符串宽度 的正则匹配。

    正向匹配→ 逆向匹配 ←
    肯定 (?=pattern) (?<=pattern)
    否定 (?!pattern) (?<!pattern)
    /ab(?=c)d/.test('abcde');
    => false
    // 注释:
    // 如果lookaround assertions是占用宽度,那test函数返回的肯定是true。
    // 但是这里返回的是false,说明ab(c)d中并不能匹配字符串的abcde,所以它是不占用宽度的。
    

    惰性模式 & 贪婪模式:

    贪婪模式 惰性模式
    尽可能多的去匹配 尽可能少的去匹配
    默认 加个问号
    .*, .+, .? .*?,.+?,.??

    修饰符 & 标志:

    修饰符 全名 意义
    g global 全局搜索
    i ignoreCase 不区分大小写
    m multiline 多行搜索
    y sticky “粘性”搜索

    编不下去了…完。

    相关文章

      网友评论

          本文标题:2018-03-11 上课摘要

          本文链接:https://www.haomeiwen.com/subject/frywfftx.html