magic-oopjs
Version:
新增了 多线程的异常日志输出
283 lines (229 loc) • 6.12 kB
JavaScript
import { Factory, Private, Joi, Protected, Public, Readonly, Schema, Final, Extends, Abstract, Params, Returns, Any, Thread } from "./main"
class Base {
// @Params({ username: Joi.string().min(3).max(30).required() })
// Base() {
// console.log("父类构造方法");
// }
// @Readonly
userInfo = null;
async main() {
console.log("父类统一的main方法");
//this.setter(this.userInfo,12) ;
//this.userInfo = 12;
this.setter.userInfo = { username: "1D2" };
// console.log(this.userInfo)
return 1000;
}
// 父类的被继承的方法
// @Abstract
// @Public
// @Params({
// username: Joi.string().min(3).max(30).required(),
// })
// @Returns({ username: Joi.string().min(3).max(30).required(), })
// async cc() {
// }
run() {
console.log("父类的run");
}
getName() {
return "父类的方法 getName"
}
name = ""
}
class Cat {
//@Params({ username: Joi.string().min(3).max(30).required() })
// Cat() {
// this.super.constructor({ username: "jsjsjsj" });
// console.log("执行构造方法");
// //return "jajaj"
// }
run() {
this.super.run();
//console.log("
// 子类的run");
}
//@Public
//@Private
// @Params([
// {
// username: Joi.string().min(3).max(30).required(),
// }
// ])
async cc(params) {
return [{ username: "123", }, { username: "00", }];
}
//@Protected
//@Readonly
//name = "";
//@Validate()
age = 12;
// __call_before()
// {
// console.log("__call_before");
// return true;
// }
// __call_stop()
// {
// console.log("调用被拦截");
// }
dataList = null;
async schemeCheck() {
// this.setter.dataList = {
// name: "122",
// list: [{ age: 10 }]
// }
// return {
// name: "122",
// list: [{ age: 10 }]
// }
this.setter.dataList = {
name: "0",
list: [{ age: 5 }]
}
console.log("schemeCheck");
let obj = {
name: 'rajan', age: 39,
}
this.getter.schameSimple(obj, 30)
}
// 单线程耗时在 0.015秒及以上,可以考虑启动多线程
schameSimple(data, age) {
// let sleep = function (delay) {
// var p = new Promise(function (resolve, reject) { //做一些异步操作
// setTimeout(function () {
// resolve();
// }, delay);
// });
// return p;
// }
// await sleep(4000)
//console.log("simpleScham @@@@ ", data.name,data.Joi, age);
let t1 = new Date().getTime();
let i = 0;
while (i < 6000000) {
i++
}
let t2 = new Date().getTime();
//console.log(`单线程耗时 -- ${(t2 - t1)/1000}`)
//const http = require("http");
//console.log(http);
//let user = JSON.parse(data);
//console.log("simpleSchame",data.dataview.getUint8(0),data.dataview.name);
//this.setter.name = "01111"
//data.dataview.setUint8(0,2000)
//return [data.dataview.getUint8(0) + 200]
//logger("rajan");
throw new Error("测试异常");
return [100]
}
onThreadLog(info) {
console.log("多线程日志接受", info);
}
}
//console.log(c['cc'],'ccccccc');
//cat.dataList = ()=>{}
// let string = cat.getName({ name: 1 });
//string = cat.getAge({name:1});
//cat.name = "";
//cat.getName = ()=>{}
//console.log(cat.name);
// console.log("子类的a",cat.a);
// console.log("父类的a",cat.getA());
//cat.cc();
//cat.call("getName",{})
// console.log("结果是",string);
// cat.main()
//console.log(cat.main);
(async () => {
try {
class SharedPoint {
constructor(array) {
this.dataview = new DataView(array);
this.dataview.name = "rajan"
}
getx() {
return this.dataview.getUint8(0);
}
set x(value) {
this.dataview.setUint8(0, value);
}
set y(value) {
this.dataview.setUint8(1, value);
}
get x() {
return this.dataview.getUint8(0);
}
get y() {
return this.dataview.getUint8(1);
}
}
// const buffer = new SharedArrayBuffer(2);
// // Create two instances of shared point.
// const point0 = new SharedPoint(buffer);
// const point1 = new SharedPoint(buffer);
// point0.x = 100
let cat = Factory(Cat, { username: "112" });
// cat.dataList = {
// name: "0",
// list: [{ age: 10 }]
// }
// cat.schemeCheck()
let obj = {
name: 'rajan', age: 39,
}
//let cc = await cat.schameSimple(obj, 20);
let t1 = new Date().getTime();
// let res = await Promise.all([cat.schameSimple(obj, 30),cat.schameSimple(obj, 20),cat.schameSimple(obj, 10)])
let t2 = new Date().getTime();
cat.schemeCheck.call({
onLog: (info) => {
console.log("多线程日志接受", info);
}
});
console.log("接收到多线程的运行结果,运行时间" + (t2 - t1) / 1000);
}
catch (err) {
console.log(err)
}
//await cat.cc([{ username: "1111" }]);
// let c = new Cat()
//cat.c = ()=>{}
// let resulr = await cat.main({ username: "ccc" });
// cat.userInfo = {username:"52d"};
// console.log(cat.userInfo)
// cat.getcc = ()=>{
// }
//console.log("外部读取的结果", resulr);
// let schame = Joi.object().keys({
// a: Joi.string().required().max(3),
// result: Joi.array().items({ name: Joi.string().required().min(3), age: Joi.number().min(10).max(60).required() }).required()
// });
// const { error } = schame.validate({ a: "21", result: [{ name: "1", age: 18 }] })
//console.log(error)
})()