Первый EventEmitter вызывает второго, чтобы не выстрелить - PullRequest
0 голосов
/ 20 июня 2019

У меня есть метод, который запускает два разных события. Второе событие не запускается. Однако, когда я закомментирую, что первое событие отлучено, второе срабатывает, как и ожидалось.

Если я уменьшу код до этого:

public async approve() {
     this.isLoadingChange.emit(true);
     this.actionPerformed.emit();
}

оба события работают нормально.

Вот метод, который я вызываю для дочернего компонента:

    public async approve() {
        try {
        this.isLoadingChange.emit(true);

            await this._letterService.approveLetter(this.letter.letterQueueId);
            this._toastrService.success('Successfully approved letter.', 'Success');
        } catch(ex) {
            this._toastrService.error('Something went wrong. Could not approve letter.', 'Error');
            console.error(ex);
        } finally {
            console.log("finally?");
            this.actionPerformed.emit();
        }
    }

А вот мои события на родителях:

    public async onActionPerformed($event) {
        console.log("action performed", this.isLoading);
        if($event) {
            this.request.templateIds = [$event.templateId];
            this.request.hashValue = $event.hashValue;
            this.filterPatternTemplate = `TemplateId: ` + this.request.templateIds[0];
            this.filterPatternHash = `Hash: ` + this.request.hashValue;
        }
        await this.performSearch();
        console.log("search complete", this.isLoading);
    }

    public async onIsLoadingChange(newValue: boolean) {
        console.log(newValue);
        this.isLoading = newValue;
    }

1 Ответ

0 голосов
/ 20 июня 2019

Я думаю, что это ожидается.Основная причина должна быть await

Согласно doc

Выражение await заставляет выполнение асинхронной функции приостанавливаться до тех пор, пока не будет выполнено обещание.

Таким образом, ваш второй метод не будет выполняться, пока не будет выполнено обещание.

Примечание. Выше также примените метод this.actionPerformed.emit();.Так же это и асинхронная функция.Так что, возможно, вы подождете, пока this.performSearch(); закончит сначала.Что касается того, почему вам не нужно ждать, когда вы удалите this.isLoadingChange.emit(true);.Возможно, это зависит от вашей бизнес-логики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...