framework4js
Version:
Framework-for-js is a better Javascript's framework
105 lines (98 loc) • 3.11 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
/**
* Pipeline 管道[流水线]
* 优点 将复杂的处理流程分解成独立子任务,从而方便测试 子任务可以重用 在复杂的业务中添加、移除、替换子任务非常轻松,对已存在的任务没有任何影响
* 缺点 复杂任务组合比较复杂 子任务可用不可保证 整体流程能够正常工作 对于流程理解有点难度
*
* 运行流程 -> new Pipeline()->via('not default function,your func name')->send('处理的内容')->through(['中间件'])->then()/->thenReturn()
*
*/
var Pipeline = /*#__PURE__*/function () {
function Pipeline() {
(0, _classCallCheck2["default"])(this, Pipeline);
// 调用每个管道的方法
(0, _defineProperty2["default"])(this, "_method", 'handle');
}
(0, _createClass2["default"])(Pipeline, [{
key: "send",
value:
/**
* send 需要通过管道的对象实例
*/
function send(passable) {
this._passable = passable;
return this;
}
/**
* through 需要通过的中间件
*/
}, {
key: "through",
value: function through() {
for (var _len = arguments.length, pipes = new Array(_len), _key = 0; _key < _len; _key++) {
pipes[_key] = arguments[_key];
}
// Array.from(arguments) 获取参数::Array arguments对象
this._pipes = Array.isArray(pipes) ? pipes : Array.from(arguments);
}
/**
* then 运行这个管道的最终回调
*/
}, {
key: "then",
value: function then(destination) {
// reduce L->R 处理函数,默认结果
var _pipeline = this._pipes.reverse().reduce(this._carry(), this._prepareDestination(destination));
return _pipeline(this._passable);
}
/**
* thenReturn 运行这个管道并返回结果
* @returns
*/
}, {
key: "thenReturn",
value: function thenReturn() {
return this.then(function (passable) {
return passable;
});
}
/**
*
* @param {*} destination callback 回调/闭包
*/
}, {
key: "_prepareDestination",
value: function _prepareDestination(destination) {
return function (passable) {
destination(passable);
};
}
/**
* via 经过 绑定调用管道的方法
* @param {*} method
* @returns
*/
}, {
key: "via",
value: function via(method) {
this._method = method;
return this;
}
/**
* carry 运送 迭代所有的middleware数组里的元素
*/
}, {
key: "_carry",
value: function _carry() {}
}]);
return Pipeline;
}();
exports["default"] = Pipeline;