как заставить его срабатывать / оповещать каждые 5 минут за angular - PullRequest
4 голосов
/ 02 апреля 2020
  limitExceed(params: any) {
    params.forEach((data: any) => {
      if (data.humidity === 100) {
        this.createNotification('warning', data.sensor, false);
      } else if (data.humidity >= 67 && data.humidity <= 99.99) {
        this.createNotification('warning', data.sensor, true);
      }
    });
  }

  createNotification(type: string, title: string, types: boolean): void {
    this.notification.config({
      nzPlacement: 'bottomRight',
      nzDuration: 5000,
    });
    if (types) {
      this.notification.create(
        type,
        title,
        'Humidity reached the minimum limit'
      );
    } else {
      this.notification.create(
        type,
        title,
        'Humidity reached the maximum'
      );
    }
  }

как заставить его срабатывать / предупреждать каждые 5 минут. но сначала он выдаст сигнал тревоги, затем после первого оповещения / триггера будет срабатывать снова / снова каждые 5 минут.

, потому что я уже установил setInterval следующим образом.

setInterval(() => {
if (types) {
      this.notification.create(
        type,
        title,
        'Humidity reached the minimum limit'
      );
    } else {
      this.notification.create(
        type,
        title,
        'Humidity reached the maximum'
      );
    }
    }, 300000);

, но это не предупредил / не сработал первым.

Ответы [ 3 ]

6 голосов
/ 02 апреля 2020

Вы можете сначала создать свои уведомления, а затем установить интервал:

function createNotification() {
  this.notification.create(...);
}

createNotification();

setInterval(() => {
  createNotification();
}, 300000);

Или, даже чище, вы можете использовать timer() Observable:

import {timer} from 'rxjs';

// starts immediately, then every 5 minutes
timer(0, 300000).subscribe(() => { 
  this.notification.create(...);
});
2 голосов
/ 02 апреля 2020
  1. Поместите свой код в метод.
  2. Вызовите этот метод.
  3. Кроме того, вызывайте этот метод каждые 5 минут с интервалом.
    createNotification() {
      if (types) {
        ...
      } else {
        ...
      }
    }

    // then in another method : 

    this.createNotification();

    setInterval(() => {
      this.createNotification();
    }, 300000);

    // Or more simply : 

    this.createNotification();

    setInterval(() => this.createNotification.bind(this) , 300000);

2 голосов
/ 02 апреля 2020

Вы можете использовать немедленно вызывающую функцию внутри setInterval:

setInterval(function notification() {
    if (types) {
      this.notification.create(
        type,
        title,
        'Humidity reached the minimum limit'
      );
    } else {
      this.notification.create(
        type,
        title,
        'Humidity reached the maximum'
      );
    }
    return notification;
    }(), 300000);

Просто вернув функцию и поместив ее (), она сразу же будет выполнена один раз после ее объявления, а затем в фактическом setInterval () ,

Простой пример тестирования:

setInterval(function notification() {
  console.log('notification');
  return notification;
}(), 3000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...