Promise.some() с таймаутом?Javascript

Форум по 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() с обещаниями, сохраняющими результаты в массиве, но это кажется неправильным, потому что я не могу понять. включено.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»