@commaai/pandajs
Version:
JavaScript interface for communicating with Panda devices.
60 lines (42 loc) • 1.64 kB
JavaScript
;
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var CancelError = function (_Error) {
(0, _inherits3.default)(CancelError, _Error);
function CancelError(message) {
(0, _classCallCheck3.default)(this, CancelError);
var _this = (0, _possibleConstructorReturn3.default)(this, (CancelError.__proto__ || Object.getPrototypeOf(CancelError)).call(this, message));
_this.name = 'CancelError';
return _this;
}
return CancelError;
}(Error);
var createDelay = function createDelay(willResolve) {
return function (ms, value) {
var timeoutId = void 0;
var internalReject = void 0;
var delayPromise = new Promise(function (resolve, reject) {
internalReject = reject;
timeoutId = setTimeout(function () {
var settle = willResolve ? resolve : reject;
settle(value);
}, ms);
});
delayPromise.cancel = function () {
if (timeoutId) {
clearTimeout(timeoutId);
timeoutId = null;
internalReject(new CancelError('Delay canceled'));
}
};
return delayPromise;
};
};
module.exports = createDelay(true);
module.exports.reject = createDelay(false);
module.exports.CancelError = CancelError;