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;
}
}
- 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函数,它的思想也多少有点基于结构化克隆算法
网友评论