Promise.some() с таймаутом? ⇐ Javascript
Promise.some() с таймаутом?
Сценарий использования: получить кучу URL-адресов и кэшировать результаты. Те, которые выполняются быстро (скажем, 500 мс), включаются в этот проход, все, что занимает больше времени, все равно выполняются и сохраняются в кеше, поэтому в следующий раз (~ 10 минут спустя в нашем приложении) они будут в кеше.
Мне хотелось бы иметь возможность сделать что-то вроде Promise.someWithTimeout(promises, timeout), где результатом будет массив разрешенных значений, завершенных до истечения времени ожидания. (Promise.some() действительно близок, он требует подсчета, а не таймаута)
Что-то вроде
Promise.someWithTimeout([обещания], ) .then((результаты) => { //вещи }) Как выглядит каждое из обещаний
return memcache.getAsync(keyFromUrl(url)) .then((cacheRes) => { если (cacheRes) вернуть кэшRes; //нет в кеше иди возьми вернуть rp(url) .then((rpRes) => { //Сохраняем в кеш, но не дожидаемся завершения memcache.setAsync(keyFromUrl(url), rpRes, 86400).catch((e) => { /*регистрация ошибок*/ }) вернуть rpRes; }) }) Идея состоит в том, что если URL-адрес возвращается быстро, мы используем его, если это занимает больше времени, мы освобождаемся, но все равно кэшируем результат, поэтому в следующий раз он у нас будет. Таким образом, время ожидания rp() будет намного дольше, чем время ожидания Promise.someWithTimeout()
.
Кто-нибудь написал библиотеку для этого (я не могу ее найти) или есть лучший шаблон? Я думал об использовании Promise.all().timeout().finally() с обещаниями, сохраняющими результаты в массиве, но это кажется неправильным, потому что я не могу понять. включено.
Сценарий использования: получить кучу URL-адресов и кэшировать результаты. Те, которые выполняются быстро (скажем, 500 мс), включаются в этот проход, все, что занимает больше времени, все равно выполняются и сохраняются в кеше, поэтому в следующий раз (~ 10 минут спустя в нашем приложении) они будут в кеше.
Мне хотелось бы иметь возможность сделать что-то вроде Promise.someWithTimeout(promises, timeout), где результатом будет массив разрешенных значений, завершенных до истечения времени ожидания. (Promise.some() действительно близок, он требует подсчета, а не таймаута)
Что-то вроде
Promise.someWithTimeout([обещания], ) .then((результаты) => { //вещи }) Как выглядит каждое из обещаний
return memcache.getAsync(keyFromUrl(url)) .then((cacheRes) => { если (cacheRes) вернуть кэшRes; //нет в кеше иди возьми вернуть rp(url) .then((rpRes) => { //Сохраняем в кеш, но не дожидаемся завершения memcache.setAsync(keyFromUrl(url), rpRes, 86400).catch((e) => { /*регистрация ошибок*/ }) вернуть rpRes; }) }) Идея состоит в том, что если URL-адрес возвращается быстро, мы используем его, если это занимает больше времени, мы освобождаемся, но все равно кэшируем результат, поэтому в следующий раз он у нас будет. Таким образом, время ожидания rp() будет намного дольше, чем время ожидания Promise.someWithTimeout()
.
Кто-нибудь написал библиотеку для этого (я не могу ее найти) или есть лучший шаблон? Я думал об использовании Promise.all().timeout().finally() с обещаниями, сохраняющими результаты в массиве, но это кажется неправильным, потому что я не могу понять. включено.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Spring JMS и ActiveMQ Artemis: управление таймаутом для синхронных сообщений
Гость » » в форуме JAVA - 0 Ответы
- 50 Просмотры
-
Последнее сообщение Гость
-
-
-
Udp выберите проблемы с таймаутом. Либо тайм-аут, либо чтение со всех клиентов
Anonymous » » в форуме C++ - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-