Я как бы новичок в узле, но я понимаю, что писать синхронные функции - это плохо. Я блокирую цикл событий или что-то в этом роде ... Так что хорошо писать все асинхронно.Как ограничить/контролировать слишком много асинхронных вызовов?
Но в некоторых случаях писать все асинхронно может быть плохо. Например, у меня есть функция, которая вызывает вызов API (для сторонней службы API), а затем я должен записать результат в базу данных. Мне нужно сделать это в течение короткого промежутка времени, например 500 раз.
Вызов этого API 500 раз асинхронно, а затем запись в базу данных 500 раз асинхронно, вероятно, запретит мне службу API (дросселирование) и перегрузить мой сервер базы данных.
Каков наилучший способ контроля или ограничения чего-либо подобного? Я хочу держать вещи асинхронными, так что они эффективны, но я просто не могу использовать вышеупомянутый подход.
Я исследовал около Promise throttling подходов. Это правильный способ подойти к этой проблеме? Есть ли более подходящий способ сделать это?
Посмотрите на пакет 'async' npm - в частности, на очередь: https://github.com/caolan/async#queue – TMan
Вам нужно будет ограничить лимит самостоятельно, чтобы не переусердствовать с сервисом API , На NPM есть модули, которые помогут вам это сделать, или вы можете просто закодировать свои собственные решения. Если вы делаете это самостоятельно, вам просто нужно сохранить счетчики и отметки времени, чтобы вы могли отслеживать, сколько вызовов API было сделано за последние N секунд, и, возможно, создать очередь команд, ожидающих выхода, когда временной интервал открывается. Подробные сведения о том, как это сделать, во многом зависят от ваших данных и правил, которые вы пытаетесь использовать в API. – jfriend00
[Это хороший JSFiddle] (http://jsfiddle.net/dukeytoo/02ohnth4/) с некоторыми хорошими шаблонами для циклических асинхронных вызовов и их можно использовать для ограничения/уменьшения количества запросов! –