사용 사례 - 여러 개의 URL을 가져 와서 결과를 캐싱합니다. 빠른 속도 (500ms)는이 패스에 통합되며, 그 시간보다 오래 걸리고 다음 번에 캐시에 저장되므로 (앱에서 ~ 10 분 후) 캐시에 저장됩니다.Promise.some()에 시간 초과가 있습니까?
Promise.someWithTimeout(promises, timeout)
과 같은 결과를 얻고 싶습니다. 결과는 시간 초과가 만료되기 전에 완료된 해결 된 값의 배열입니다.
뭔가 약속의 각 보이는
Promise.someWithTimeout([promises], <timeout value>)
.then((results) => {
//stuff
})
같은 (
Promise.some()
이 아닌 제한 시간이 수를 필요로 정말 가까운)
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;
})
})
있는 아이디어 같은 URL이 돌아 오면 그 빨리 우리는 그것을 사용한다. 우리가 보석을 얻는데 더 오래 걸리더라도 다음 번에 결과를 캐쉬하면 우리는 그것을 가진다. 따라서 rp()
시간 초과는 Promise.someWithTimeout()
보다 훨씬 길어집니다.
누구든지이 작업을 수행 할 수있는 lib를 작성 했습니까? 아니면 더 좋은 패턴이 있습니까? 나는 Promise.all().timeout().finally()
을 사용하여 배열에 결과를 숨기 겠다는 약속을했지만, 내 손가락을 댈 수는 없다고 생각합니다.
는 각 패스가 동일한 "URL을의 무리"를 구성 하는가 또는 통과하는 통과에 따라 다를 수 있습니까? –