UNPKG

esnext-async

Version:

Patterns for asynchronous computation in ES.next

69 lines (57 loc) 1.74 kB
'use strict'; 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;