Рекурсивная цепочка обещаний - PullRequest
0 голосов
/ 08 июня 2018

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

Код выглядит так:

refresh: function(){
   return somePromise
   .then(doA)
   .then(doB)
   .then(doC)
   .catch(error)
}

Итакв настоящее время другая функция вызывает эту функцию «refresh» с setInterval каждую секунду.

Проблема заключается в том, что из-за асинхронной природы этих вызовов в методе обновления появляются некоторые ошибки.

Я изменил кодснова вызвать метод «refresh» рекурсивно в последнем операторе «.then» и удалить setInterval.

refresh: function(){
   return somePromise
   .then(doA)
   .then(doB)
   .then(doC)
   .then(refresh)
}

Теперь, похоже, ошибки исчезли, и все работает отлично.Мой вопрос: это хорошая практика?Есть ли проблемы с памятью при рекурсивном вызове метода «refresh» в последнем операторе «.then»?

1 Ответ

0 голосов
/ 08 июня 2018

Является ли это хорошей практикой?

Если вы просто хотите, чтобы оно повторялось всякий раз, когда заканчивается, и следите за тем, чтобы следующая итерация не начиналась до завершения предыдущей, этоидеально хорошая практика (намного лучше, чем setInterval()).Ваш цикл останавливается, если где-либо происходит отклонение, поэтому вы можете захотеть закодировать, что должно произойти с .catch().

Есть ли проблемы с памятью при рекурсивном вызове метода «refresh» в последнем ».тогда 'заявление?

Нет.Отсутсвуют.* * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * *} * *} * * * * * *} *} *} *} *} *} *} *} * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Требует, чтобы вы выполнили асинхронные операции.в javascript - соображения памяти для более подробного обсуждения потребления памяти во время цикла.


К вашему сведению, это должен быть псевдокод, поскольку функция, определенная как свойство refresh: function() {}, не будет напрямуювызывается с .then(refresh).Итак, я предполагаю, что вы сделали это правильно в своем реальном коде.

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