美文网首页
使用小技巧

使用小技巧

作者: barriers | 来源:发表于2022-10-28 10:10 被阅读0次

    1 node.js中实现一个sleep函数

    import * as dayjs from 'dayjs';
    
    export class TurnRecordController {
      sleep = (delay: number) =>
        new Promise((resolve) => setTimeout(resolve, delay));
      private readonly sleepTime = 7 * 1000;
    
      constructor() {}
    
      async getMany() {
        console.log(dayjs().format('YYYY-MM-DD HH:mm:ss'));
        await this.sleep(this.sleepTime);
        console.log(dayjs().format('YYYY-MM-DD HH:mm:ss'));
        return true;
      }
    }
    
    1. node.js中copy

    浅拷贝:

    # 法1
    var obj = { foo: "foo", bar: "bar" };
    var copy = { ...obj };
    
    # 法2
    var obj = { foo: "foo", bar: "bar" };
    var copy = Object.assign({}, obj);
    
    var obj1 = { foo: "foo" };
    var obj2 = { bar: "bar" };
    var copySpread = { ...obj1, ...obj2 };
    // Object { foo: "foo", bar: "bar" }
    var copyAssign = Object.assign({}, obj1, obj2);
    

    如果要操作的对象拥有的属性都是值类型,那么我们可以用扩展语法或者Object.assign(...);上面方法的问题是,如果对象的属性本身也是对象,那么实际被拷贝的只是那些指针(浅拷贝)。

    深拷贝

    var obj = { a: 0, b: { c: 0 } };
    var copy = JSON.parse(JSON.stringify(obj));
    

    这个方法只在对象包含可序列化值,并且没有循环引用的时候有用。其中一个不可序列化的类型的就是日期对象 - 尽管它显示出来是字符串化的ISO格式,JSON.parse只会把它解析成为一个字符串,而不是日期类型

    Node.js的8.0.0版本提供了一个 序列化 api 可以跟结构化克隆媲美

    const v8 = require('v8');
    const buf = v8.serialize({a: 'foo', b: new Date()});
    const cloned = v8.deserialize(buf);
    cloned.b.getMonth();
    

    node8.0.0版本以下的话,比较稳定的方法,可以考虑用 lodash的cloneDeep函数,它的思想也多少有点基于结构化克隆算法

    相关文章

      网友评论

          本文标题:使用小技巧

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