nope/lib/promise/nopePromise.ts

59 lines
1.6 KiB
TypeScript
Raw Normal View History

2020-11-06 08:10:30 +00:00
/**
* @author Martin Karkowski
* @email m.karkowski@zema.de
* @create date 2020-11-06 09:07:28
* @modify date 2020-11-06 09:09:33
* @desc [description]
*/
2020-11-06 08:10:30 +00:00
import { INopePromise } from "../types/nope/nopePromise.interface";
/**
* A Custom Implementation of Nope-Promise.
* They are cancelable.
*
* @export
* @class NopePromise
* @extends {Promise<T>}
* @implements {INopePromise<T>}
* @template T Type of the Default Promise
* @template E Type of the Cancelation Data.
*/
2020-11-05 17:02:29 +00:00
export class NopePromise<T,E=any> extends Promise<T> implements INopePromise<T> {
2020-11-06 08:10:30 +00:00
/**
* Function used to cancel the Element.
*
* @param {E} reason
* @memberof NopePromise
*/
cancel(reason: E): void {
throw new Error("Method has to be overwritten");
}
2020-11-06 08:10:30 +00:00
/**
* Attribute holding the Task-ID assinged by a dispatcher.
*
* @type {string}
* @memberof NopePromise
*/
taskId: string;
2020-11-06 08:10:30 +00:00
/**
* Creates an instance of NopePromise.
* @param {((resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void)} executor
* @param {(reason: E) => void} [cancel]
* @param {string} [taskId]
* @memberof NopePromise
*/
constructor(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void, cancel?: (reason: E) => void, taskId?: string){
super(executor);
if (typeof cancel === 'function'){
this.cancel = cancel;
}
if (typeof taskId === 'string'){
this.taskId = taskId;
}
}
}