ユースケース - 一連のURLを取得し、結果をキャッシュします。高速で完了したもの(例えば500ms)がこのパスに組み込まれます。それよりも時間がかかり、キャッシュに保存されるので、次回(アプリで10分後)にキャッシュに保存されます。Promise.some()にタイムアウトがありますか?
私はPromise.someWithTimeout(promises, timeout)
のようなことをしたいと思っています。結果は、タイムアウトの期限が切れる前に完了した解決された値の配列です。
return memcache.getAsync(keyFromUrl(url))
.then((cacheRes) => {
if(cacheRes) return cacheRes;
//not in cache go get it
return rp(url)
.then((rpRes) => {
//Save to cache but don't wait for it to complete
memcache.setAsync(keyFromUrl(url), rpRes, 86400).catch((e) => { /*error logging*/ })
return rpRes;
})
})
のように見えます
Promise.someWithTimeout([promises], <timeout value>)
.then((results) => {
//stuff
})
のような(Promise.some()
が、それはカウントされませタイムアウトを取ることにより、実際に近いです)
何か私たちがそれを使用するのは早いですが、それは時間がかかりますが、結果がまだキャッシュされているので、次回にはそれを持っています。だからrp()
タイムアウトは、Promise.someWithTimeout()
よりずっと長くなります
これを行うためのライブラリを書いた人は誰ですか(見つけられません)、またはより良いパターンがありますか?私は約Promise.all().timeout().finally()
を約使用して約束しているが、その結果を配列に隠しているが、私の指を置くことができない理由のために正しいと感じていない。
は各パスは同じ「URLの束」を含むか、またはそれらを渡すために、パスごとに異なることができますか? –