У меня есть асинхронное задание, выполнение которого занимает много времени. Когда задание начинает выполняться, я установил мат-спиннер и установил тайм-аут на 60000 миллисекунд. Но теперь у нас есть служба уведомлений, которая сообщает о статусе выполнения задания. Я хочу отключить счетчик при получении сообщения независимо от того, не удалось ли выполнить задание.
Код для счетчика с тайм-аутом: -
this.recommendationService
.executeCustomerOpportunityMapper(opportuniyMapperJson)
.subscribe(
response => {
this.isExecuteOppRanking = true;
this.snakbar.statusBar(
"Executing customer opportunity ranking",
"Success"
);
this.spinner.show();
setTimeout(() => {
this.spinner.hide();
this.loadRankedOpportunities(tableMetadata);
this.selectedIndex = 3;
this.isExecuteOppRanking = false;
}, 60000);
Служба уведомлений о сообщениях: -
this.messageService.messageReceived$.subscribe(data => {
this.snakbar.statusBar("Platform job status - " + data, "Info");
});
Я хочу, чтобы время ожидания моего счетчика истекло, когда messageService получает уведомление об успехе/сбое, а не истекает через 60000 мс.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я предполагаю, что обе ваши подписки расположены в одном компоненте, если вы хотите остановить счетчик, можете ли вы переместить spinner.hide() в другую подписку?
this.messageService.messageReceived$.subscribe(data => {
this.snakbar.statusBar("Platform job status - " + data, "Info");
if (data === "done") { // somehow check the status if necessary
this.spinner.hide();
this.loadRankedOpportunities(tableMetadata);
this.selectedIndex = 3;
this.isExecuteOppRanking = false;
}
});
this.recommendationService
.executeCustomerOpportunityMapper(opportuniyMapperJson)
.subscribe(response => {
this.isExecuteOppRanking = true;
this.snakbar.statusBar(
"Executing customer opportunity ranking",
"Success"
);
this.spinner.show();
});
Это не работает ... его ошибка броска. Метаданные не определены вне области executeCustomerOpportunity, поэтому, когда я вызываю его в ngOninit, его ошибка броска