dicem
@dicem

Как повторить выполнение функции определенное колличество раз с заданным промежутком?

Здрасти, имеется функция для инициализации карт на сайте, срабатывает через раз, потому что программистов яндекса впору по увольнять. Инициализация следующая:
try {
                    this.SuggestView = new ymaps.SuggestView(id, {
                        provider: { suggest: (...args) => this.suggest(...args) },
                        boundedBy: this.bounds[this.brandCode],
                        container: document.getElementById(id + '-container'),
                        results: 50
                    })

                    this.SuggestView.events.add('select', e => {
                        this.geoValue = e.get('item').value
                        localStorage.setItem('location.city', JSON.parse(e.get('item').jsonData).city)
                        localStorage.setItem('location.address', e.get('item').value)
                        this.$emit('handleAddressInput', e.get('item').value)
                    })

                    console.log('YAMAPS Init!')
                } catch (e) {
                    console.log(`yamaps init Error: ${e}`)
                }


Как повторить блок try определенное колличество раз (например 10 раз) либо пока оно не перестанет catch'ить ошибки?
UPDATE:
Повторять скажем через каждые две секунды, пытался делать через setTimeout, но он просто ставит выполнение функции на таймер и моментально идет дальше по циклу.
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
Оборачиваете бизнес логику в какую-то функцию. Например в buildMap()
Далее создаёте функцию-обертку
function initMap (tryCount = 0) {
  try {
    buildMap()
    // Если функция выполнилась без ошибок прервать цикл
    return
  } catch (e) {
    // Ставим таймер на повтор
    if (tryCount <= MAX_CALL)
      setTimeout(() => initMap(tryCount + 1), 2000)
    else
      // Если превышено количество попыток — выбросить исключение наверх
     throw e
  }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
function double (i = 0) {
i++;
try {
this.SuggestView = new ymaps.SuggestView(id, {
provider: { suggest: (...args) => this.suggest(...args) },
boundedBy: this.bounds[this.brandCode],
container: document.getElementById(id + '-container'),
results: 50
})

this.SuggestView.events.add('select', e => {
this.geoValue = e.get('item').value
localStorage.setItem('location.city', JSON.parse(e.get('item').jsonData).city)
localStorage.setItem('location.address', e.get('item').value)
this.$emit('handleAddressInput', e.get('item').value)
})

console.log('YAMAPS Init!')
} catch (e) {
console.log(`yamaps init Error: ${e}`)
if(здесь проверяем на наличие элемента, его длина должна быть < 1 || i > 10) {
double (i)
}
}
}

как то так
Ответ написан
Комментировать
@matios
Technical Team Lead
Обернуть все в setInterval и после this.SuggestView.events.add его очищать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы