@ztes/corejs
Version:
Core-js is a better Javascript's framework
113 lines (97 loc) • 3.09 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;