mm_os
Version:
这是超级美眉服务端框架,用于快速构建应用程序。
121 lines (114 loc) • 2.2 kB
JavaScript
const {
types
} = require("util");
/**
* 行为器
*/
class Ref {
/**
* 构造函数
* @param {Object} obj 对象
*/
constructor(obj) {
this.msg = [];
this._init(obj);
}
}
/**
* 初始化
* @param {Object} config 配置参数
* @returns {Object} 执行结果
*/
Ref.prototype._init = function(obj) {
Object.assign(this, obj);
this.data = this.data || {};
this.methods = this.methods || {};
return this;
}
/**
* 运行当前类函数
* @param {String} name 函数名
* @param {Object} args 参数集合
* @returns {Object} 执行结果
*/
Ref.prototype.run = async function(name, ...args) {
var ret;
var key = name + "_before";
if (this[key]) {
ret = this[key](...args);
if (types.isPromise(ret)) {
ret = await ret
}
}
key = name + "_check";
if (this[key]) {
ret = this[key](...args);
if (types.isPromise(ret)) {
ret = await ret
}
if (ret) {
return ret;
}
}
if (this[name]) {
ret = this[name](...args);
if (types.isPromise(ret)) {
ret = await ret
}
if (ret) {
key = name + "_after";
if (this[key]) {
ret = this[key](...args);
if (types.isPromise(ret)) {
ret = await ret
}
}
}
}
return ret;
}
/**
* 执行子脚本函数
* @param {String} name 名称
* @param {String} func_name 执行方法
* @param {Object} args 参数集合
* @returns {Object} 返回执行结果
*/
Ref.prototype.exec = async function(name, func_name, ...args) {
var cs = this.dict[name];
var ret;
var key = func_name + "_before";
if (cs[key]) {
ret = cs[key](...args);
if (types.isPromise(ret)) {
ret = await ret
}
}
key = func_name + "_check";
if (cs[key]) {
ret = cs[key](...args);
if (types.isPromise(ret)) {
ret = await ret
}
if (ret) {
return ret;
}
}
if (cs[func_name]) {
ret = cs[func_name](...args);
if (types.isPromise(ret)) {
ret = await ret
}
if (ret) {
key = func_name + "_after";
if (cs[key]) {
ret = cs[key](...args);
if (types.isPromise(ret)) {
ret = await ret
}
}
}
}
return ret;
}
module.exports = Ref;