UNPKG

@ztes/corejs

Version:

Core-js is a better Javascript's framework

113 lines (97 loc) 3.09 kB
"use strict"; 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;