UNPKG

@orbit/core

Version:

Core library for Orbit - a flexible data access and synchronization layer.

82 lines 7.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TaskProcessor = void 0; /** * A `TaskProcessor` performs a `Task` by calling `perform()` on its target. * This is triggered by calling `process()` on the processor. * * A processor maintains a promise that represents the eventual state (resolved * or rejected) of the task. This promise is created upon construction, and * will be returned by calling `settle()`. * * A task can be re-tried by first calling `reset()` on the processor. This * will clear the processor's state and allow `process()` to be invoked again. */ class TaskProcessor { /** * Creates an instance of TaskProcessor. */ constructor(target, task) { this.target = target; this.task = task; this.reset(); } /** * Clears the processor state, allowing for a fresh call to `process()`. */ reset() { this._started = false; this._settled = false; this._settlement = new Promise((resolve, reject) => { this._success = (r) => { this._settled = true; resolve(r); }; this._fail = (e) => { this._settled = true; reject(e); }; }); } /** * Has `process` been invoked? */ get started() { return this._started; } /** * Has promise settled, either via `process` or `reject`? */ get settled() { return this._settled; } /** * The eventual result of processing. */ settle() { return this._settlement; } /** * Invokes `perform` on the target. */ process() { if (!this._started) { this._started = true; this.target.perform(this.task).then(this._success, this._fail); } return this.settle(); } /** * Reject the current promise with a specific error. */ reject(e) { if (this._settled) { throw new Error('TaskProcessor#reject can not be invoked when processing has already settled.'); } else if (this._fail) { this._fail(e); } } } exports.TaskProcessor = TaskProcessor; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1wcm9jZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFzay1wcm9jZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUE7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsYUFBYTtJQWV4Qjs7T0FFRztJQUNILFlBQ0UsTUFBOEMsRUFDOUMsSUFBK0I7UUFFL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFFakIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDakQsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDckIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2IsQ0FBQyxDQUFDO1lBRUYsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDckIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ1osQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBRXJCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDaEU7UUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsQ0FBUTtRQUNiLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixNQUFNLElBQUksS0FBSyxDQUNiLDhFQUE4RSxDQUMvRSxDQUFDO1NBQ0g7YUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNmO0lBQ0gsQ0FBQztDQUNGO0FBN0ZELHNDQTZGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhc2ssIFBlcmZvcm1lciB9IGZyb20gJy4vdGFzayc7XG5cbi8qKlxuICogQSBgVGFza1Byb2Nlc3NvcmAgcGVyZm9ybXMgYSBgVGFza2AgYnkgY2FsbGluZyBgcGVyZm9ybSgpYCBvbiBpdHMgdGFyZ2V0LlxuICogVGhpcyBpcyB0cmlnZ2VyZWQgYnkgY2FsbGluZyBgcHJvY2VzcygpYCBvbiB0aGUgcHJvY2Vzc29yLlxuICpcbiAqIEEgcHJvY2Vzc29yIG1haW50YWlucyBhIHByb21pc2UgdGhhdCByZXByZXNlbnRzIHRoZSBldmVudHVhbCBzdGF0ZSAocmVzb2x2ZWRcbiAqIG9yIHJlamVjdGVkKSBvZiB0aGUgdGFzay4gVGhpcyBwcm9taXNlIGlzIGNyZWF0ZWQgdXBvbiBjb25zdHJ1Y3Rpb24sIGFuZFxuICogd2lsbCBiZSByZXR1cm5lZCBieSBjYWxsaW5nIGBzZXR0bGUoKWAuXG4gKlxuICogQSB0YXNrIGNhbiBiZSByZS10cmllZCBieSBmaXJzdCBjYWxsaW5nIGByZXNldCgpYCBvbiB0aGUgcHJvY2Vzc29yLiBUaGlzXG4gKiB3aWxsIGNsZWFyIHRoZSBwcm9jZXNzb3IncyBzdGF0ZSBhbmQgYWxsb3cgYHByb2Nlc3MoKWAgdG8gYmUgaW52b2tlZCBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFRhc2tQcm9jZXNzb3I8XG4gIFR5cGUgPSBzdHJpbmcsXG4gIERhdGEgPSB1bmtub3duLFxuICBPcHRpb25zID0gdW5rbm93bixcbiAgUmVzdWx0ID0gdW5rbm93blxuPiB7XG4gIHRhcmdldDogUGVyZm9ybWVyPFR5cGUsIERhdGEsIE9wdGlvbnMsIFJlc3VsdD47XG4gIHRhc2s6IFRhc2s8VHlwZSwgRGF0YSwgT3B0aW9ucz47XG5cbiAgcHJpdmF0ZSBfc3RhcnRlZCE6IGJvb2xlYW47XG4gIHByaXZhdGUgX3NldHRsZWQhOiBib29sZWFuO1xuICBwcml2YXRlIF9zZXR0bGVtZW50ITogUHJvbWlzZTxSZXN1bHQ+O1xuICBwcml2YXRlIF9zdWNjZXNzPzogKHJlc29sdXRpb246IFJlc3VsdCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfZmFpbD86IChlOiBFcnJvcikgPT4gdm9pZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBUYXNrUHJvY2Vzc29yLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgdGFyZ2V0OiBQZXJmb3JtZXI8VHlwZSwgRGF0YSwgT3B0aW9ucywgUmVzdWx0PixcbiAgICB0YXNrOiBUYXNrPFR5cGUsIERhdGEsIE9wdGlvbnM+XG4gICkge1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHRoaXMudGFzayA9IHRhc2s7XG5cbiAgICB0aGlzLnJlc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBwcm9jZXNzb3Igc3RhdGUsIGFsbG93aW5nIGZvciBhIGZyZXNoIGNhbGwgdG8gYHByb2Nlc3MoKWAuXG4gICAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fc2V0dGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3NldHRsZW1lbnQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9zdWNjZXNzID0gKHIpID0+IHtcbiAgICAgICAgdGhpcy5fc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIHJlc29sdmUocik7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLl9mYWlsID0gKGUpID0+IHtcbiAgICAgICAgdGhpcy5fc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFzIGBwcm9jZXNzYCBiZWVuIGludm9rZWQ/XG4gICAqL1xuICBnZXQgc3RhcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXMgcHJvbWlzZSBzZXR0bGVkLCBlaXRoZXIgdmlhIGBwcm9jZXNzYCBvciBgcmVqZWN0YD9cbiAgICovXG4gIGdldCBzZXR0bGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZXR0bGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBldmVudHVhbCByZXN1bHQgb2YgcHJvY2Vzc2luZy5cbiAgICovXG4gIHNldHRsZSgpOiBQcm9taXNlPFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLl9zZXR0bGVtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZXMgYHBlcmZvcm1gIG9uIHRoZSB0YXJnZXQuXG4gICAqL1xuICBwcm9jZXNzKCk6IFByb21pc2U8UmVzdWx0PiB7XG4gICAgaWYgKCF0aGlzLl9zdGFydGVkKSB7XG4gICAgICB0aGlzLl9zdGFydGVkID0gdHJ1ZTtcblxuICAgICAgdGhpcy50YXJnZXQucGVyZm9ybSh0aGlzLnRhc2spLnRoZW4odGhpcy5fc3VjY2VzcywgdGhpcy5fZmFpbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2V0dGxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVqZWN0IHRoZSBjdXJyZW50IHByb21pc2Ugd2l0aCBhIHNwZWNpZmljIGVycm9yLlxuICAgKi9cbiAgcmVqZWN0KGU6IEVycm9yKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3NldHRsZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1Rhc2tQcm9jZXNzb3IjcmVqZWN0IGNhbiBub3QgYmUgaW52b2tlZCB3aGVuIHByb2Nlc3NpbmcgaGFzIGFscmVhZHkgc2V0dGxlZC4nXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fZmFpbCkge1xuICAgICAgdGhpcy5fZmFpbChlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==