vue-poster-editor
Version: 
A poster editor based on Vue.js
62 lines (47 loc) • 1.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.SeriesPromise = undefined;
var _assign2 = require('lodash/assign');
var _assign3 = _interopRequireDefault(_assign2);
var _bluebird = require('bluebird');
var _bluebird2 = _interopRequireDefault(_bluebird);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function SeriesPromise() {
    var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
    this.concurrency = 5;
    (0, _assign3.default)(this, opts);
    this.isRunning = false;
    this.runnings = 0;
    this.promises = [];
};
SeriesPromise.prototype.add = function (loader) {
    var _this = this;
    var promise = new _bluebird2.default(function (resolve, reject) {
        _this.promises.push({
            resolve: resolve,
            reject: reject,
            loader: loader
        });
        _this.run();
    });
    return promise;
};
SeriesPromise.prototype.run = function () {
    var _this2 = this;
    if (this.promises.length && this.runnings < this.concurrency) {
        this.isRunning = true;
        var loader = this.promises.shift();
        ++this.runnings;
        loader.loader(function () {
            --_this2.runnings;
            if (!_this2.runnings) {
                _this2.isRunning = false;
            }
            _this2.run();
        }).then(loader.resolve, loader.reject);
    }
};
exports.default = new SeriesPromise();
exports.SeriesPromise = SeriesPromise;