Установка элементов экземпляра до завершения вызова super () - PullRequest
0 голосов
/ 25 января 2019

Я решил, что мне нужно какое-то обещание об отмене, поэтому я попытался написать его сам. Однако я застрял на невозможности установить элемент экземпляра до завершения вызова super () - и для расширения Promise может потребоваться установить что-то перед super ().

Итак, мой вопрос: есть ли простой способ, как этого добиться, не переписывая всю функциональность Promise?

export class CancelablePromise<T> extends Promise<T> {
    private onCancel: () => void = () => {};

    public constructor(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void, oncancel: (handler: ()=>void)=>void) => void) {
        super( (res, rej) => {
            executor(res, rej, ( handler: () => void) => { this.onCancel = handler ; });
        });
    }

    public Cancel(): void {
        this.onCancel();
    }
}

1 Ответ

0 голосов
/ 25 января 2019

Вы можете использовать локальные переменные - либо для сбора функций распознавателя:

constructor(executor) {
    let resolve, reject;
    super((res, rej) => { resolve = res; reject = rej; });
    try {
        executor(resolve, reject, handler => { this.onCancel = handler ; });
    } catch(e) {
        reject(e);
    }
}

, либо для сохранения обработчика перед созданием свойства:

constructor(executor) {
    let onCancel; // = default handler
    super((resolve, reject) => {
        executor(resolve, reject, handler => { onCancel = handler; });
    });
    this.onCancel = onCancel;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...