UNPKG

magic-oopjs

Version:

新增了 多线程的异常日志输出

283 lines (229 loc) 6.12 kB
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("父类构造方法"); // } @Public // @Readonly @Final @Schema({ username: Joi.string().min(3).max(30).required() }) userInfo = null; @Public @Final 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() { // } @Protected run() { console.log("父类的run"); } @Public getName() { return "父类的方法 getName" } @Public @Schema(Joi.string().min(3)) name = "" } @Extends(Base) class Cat { //@Params({ username: Joi.string().min(3).max(30).required() }) // Cat() { // this.super.constructor({ username: "jsjsjsj" }); // console.log("执行构造方法"); // //return "jajaj" // } @Public run() { this.super.run(); //console.log(" // 子类的run"); } @Public //@Public //@Private // @Params([ // { // username: Joi.string().min(3).max(30).required(), // } // ]) @Returns([{ username: Joi.string().min(3).max(30).required() }, Any]) async cc(params) { return [{ username: "123", }, { username: "00", }]; } //@Protected //@Readonly //name = ""; //@Validate() @Public age = 12; // __call_before() // { // console.log("__call_before"); // return true; // } // __call_stop() // { // console.log("调用被拦截"); // } @Schema(Joi.object({ name: Joi.string().max(5).required(), list: Joi.array().items({ age: Joi.number().min(5).required() }).required() })) dataList = null; @Public 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) } @Thread({ logging: true ,logger:"onThreadLog"}) // 单线程耗时在 0.015秒及以上,可以考虑启动多线程 @Params(Any, Joi.number().required().min(5)) @Returns([Joi.number().required()]) @Private 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] } @Private 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) })()