esnext-async
Version:
Patterns for asynchronous computation in ES.next
69 lines (57 loc) • 1.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _default = function () {
function _default() {
(0, _classCallCheck3.default)(this, _default);
this.requests = [];
this.values = [];
}
(0, _createClass3.default)(_default, [{
key: 'publish',
value: function publish(value) {
if (this.requests.length > 0) {
this.requests.shift().resolve(value);
} else {
this.values.push({ value: value });
}
}
}, {
key: 'throw',
value: function _throw(error) {
if (this.requests.length > 0) {
this.requests.shift().reject(error);
} else {
this.values.push({ error: error });
}
}
}, {
key: 'consume',
value: function consume() {
var _this = this;
return new _promise2.default(function (resolve, reject) {
if (_this.values.length === 0) {
_this.requests.push({ resolve: resolve, reject: reject });
} else {
var item = _this.values.shift();
if ('error' in item) {
reject(item.error);
} else {
resolve(item.value);
}
}
});
}
}]);
return _default;
}();
exports.default = _default;