cz-conventional-changelog-befe
Version:
cz adaptor for baidu BEFE
105 lines (81 loc) • 2.71 kB
JavaScript
;
var _regenerator = require("babel-runtime/regenerator");
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require("babel-runtime/helpers/asyncToGenerator");
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @file storeFirstCall
* @author imcuttle <moyuyc95@gmail.com>
* @date 2018/11/2
*
*/
function storeFirstCallAsync(fn, store) {
var saveCall = function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
var result,
_args = arguments;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return fn.apply(this, _args);
case 2:
result = _context.sent;
store.set(result);
return _context.abrupt("return", result);
case 5:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
return function saveCall() {
return _ref.apply(this, arguments);
};
}();
var wrap = function () {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() {
var prevResult,
_args2 = arguments;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (!isFirstTime) {
_context2.next = 9;
break;
}
isFirstTime = false;
prevResult = store.get();
if (!prevResult) {
_context2.next = 6;
break;
}
saveCall.apply(this, _args2);
return _context2.abrupt("return", prevResult);
case 6:
_context2.next = 8;
return saveCall.apply(this, _args2);
case 8:
return _context2.abrupt("return", _context2.sent);
case 9:
return _context2.abrupt("return", fn.apply(this, _args2));
case 10:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
return function wrap() {
return _ref2.apply(this, arguments);
};
}();
var isFirstTime = true;
Object.setPrototypeOf(wrap, fn);
return wrap;
}
module.exports = storeFirstCallAsync;