UNPKG

@orbit/core

Version:

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

78 lines 7.53 kB
/** * 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. */ export 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); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1wcm9jZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFzay1wcm9jZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBZXhCOztPQUVHO0lBQ0gsWUFDRSxNQUE4QyxFQUM5QyxJQUErQjtRQUUvQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUVqQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNqRCxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDYixDQUFDLENBQUM7WUFFRixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFFckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNoRTtRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxDQUFRO1FBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsOEVBQThFLENBQy9FLENBQUM7U0FDSDthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2Y7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUYXNrLCBQZXJmb3JtZXIgfSBmcm9tICcuL3Rhc2snO1xuXG4vKipcbiAqIEEgYFRhc2tQcm9jZXNzb3JgIHBlcmZvcm1zIGEgYFRhc2tgIGJ5IGNhbGxpbmcgYHBlcmZvcm0oKWAgb24gaXRzIHRhcmdldC5cbiAqIFRoaXMgaXMgdHJpZ2dlcmVkIGJ5IGNhbGxpbmcgYHByb2Nlc3MoKWAgb24gdGhlIHByb2Nlc3Nvci5cbiAqXG4gKiBBIHByb2Nlc3NvciBtYWludGFpbnMgYSBwcm9taXNlIHRoYXQgcmVwcmVzZW50cyB0aGUgZXZlbnR1YWwgc3RhdGUgKHJlc29sdmVkXG4gKiBvciByZWplY3RlZCkgb2YgdGhlIHRhc2suIFRoaXMgcHJvbWlzZSBpcyBjcmVhdGVkIHVwb24gY29uc3RydWN0aW9uLCBhbmRcbiAqIHdpbGwgYmUgcmV0dXJuZWQgYnkgY2FsbGluZyBgc2V0dGxlKClgLlxuICpcbiAqIEEgdGFzayBjYW4gYmUgcmUtdHJpZWQgYnkgZmlyc3QgY2FsbGluZyBgcmVzZXQoKWAgb24gdGhlIHByb2Nlc3Nvci4gVGhpc1xuICogd2lsbCBjbGVhciB0aGUgcHJvY2Vzc29yJ3Mgc3RhdGUgYW5kIGFsbG93IGBwcm9jZXNzKClgIHRvIGJlIGludm9rZWQgYWdhaW4uXG4gKi9cbmV4cG9ydCBjbGFzcyBUYXNrUHJvY2Vzc29yPFxuICBUeXBlID0gc3RyaW5nLFxuICBEYXRhID0gdW5rbm93bixcbiAgT3B0aW9ucyA9IHVua25vd24sXG4gIFJlc3VsdCA9IHVua25vd25cbj4ge1xuICB0YXJnZXQ6IFBlcmZvcm1lcjxUeXBlLCBEYXRhLCBPcHRpb25zLCBSZXN1bHQ+O1xuICB0YXNrOiBUYXNrPFR5cGUsIERhdGEsIE9wdGlvbnM+O1xuXG4gIHByaXZhdGUgX3N0YXJ0ZWQhOiBib29sZWFuO1xuICBwcml2YXRlIF9zZXR0bGVkITogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfc2V0dGxlbWVudCE6IFByb21pc2U8UmVzdWx0PjtcbiAgcHJpdmF0ZSBfc3VjY2Vzcz86IChyZXNvbHV0aW9uOiBSZXN1bHQpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2ZhaWw/OiAoZTogRXJyb3IpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgVGFza1Byb2Nlc3Nvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRhcmdldDogUGVyZm9ybWVyPFR5cGUsIERhdGEsIE9wdGlvbnMsIFJlc3VsdD4sXG4gICAgdGFzazogVGFzazxUeXBlLCBEYXRhLCBPcHRpb25zPlxuICApIHtcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICB0aGlzLnRhc2sgPSB0YXNrO1xuXG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgcHJvY2Vzc29yIHN0YXRlLCBhbGxvd2luZyBmb3IgYSBmcmVzaCBjYWxsIHRvIGBwcm9jZXNzKClgLlxuICAgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3NldHRsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9zZXR0bGVtZW50ID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fc3VjY2VzcyA9IChyKSA9PiB7XG4gICAgICAgIHRoaXMuX3NldHRsZWQgPSB0cnVlO1xuICAgICAgICByZXNvbHZlKHIpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5fZmFpbCA9IChlKSA9PiB7XG4gICAgICAgIHRoaXMuX3NldHRsZWQgPSB0cnVlO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhcyBgcHJvY2Vzc2AgYmVlbiBpbnZva2VkP1xuICAgKi9cbiAgZ2V0IHN0YXJ0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogSGFzIHByb21pc2Ugc2V0dGxlZCwgZWl0aGVyIHZpYSBgcHJvY2Vzc2Agb3IgYHJlamVjdGA/XG4gICAqL1xuICBnZXQgc2V0dGxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0dGxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnR1YWwgcmVzdWx0IG9mIHByb2Nlc3NpbmcuXG4gICAqL1xuICBzZXR0bGUoKTogUHJvbWlzZTxSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5fc2V0dGxlbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2VzIGBwZXJmb3JtYCBvbiB0aGUgdGFyZ2V0LlxuICAgKi9cbiAgcHJvY2VzcygpOiBQcm9taXNlPFJlc3VsdD4ge1xuICAgIGlmICghdGhpcy5fc3RhcnRlZCkge1xuICAgICAgdGhpcy5fc3RhcnRlZCA9IHRydWU7XG5cbiAgICAgIHRoaXMudGFyZ2V0LnBlcmZvcm0odGhpcy50YXNrKS50aGVuKHRoaXMuX3N1Y2Nlc3MsIHRoaXMuX2ZhaWwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNldHRsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlamVjdCB0aGUgY3VycmVudCBwcm9taXNlIHdpdGggYSBzcGVjaWZpYyBlcnJvci5cbiAgICovXG4gIHJlamVjdChlOiBFcnJvcik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zZXR0bGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdUYXNrUHJvY2Vzc29yI3JlamVjdCBjYW4gbm90IGJlIGludm9rZWQgd2hlbiBwcm9jZXNzaW5nIGhhcyBhbHJlYWR5IHNldHRsZWQuJ1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2ZhaWwpIHtcbiAgICAgIHRoaXMuX2ZhaWwoZSk7XG4gICAgfVxuICB9XG59XG4iXX0=