File size: 562 Bytes
cd99321
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import { weatherApi } from '../api/client'

const MAX_CONCURRENT = 3
let active = 0
const queue: Array<() => void> = []

function acquire(): Promise<void> {
  if (active < MAX_CONCURRENT) { active++; return Promise.resolve() }
  return new Promise(resolve => queue.push(resolve))
}

function release(): void {
  const next = queue.shift()
  if (next) next()
  else active--
}

export async function fetchWeather(lat: number, lng: number, date: string) {
  await acquire()
  try {
    return await weatherApi.get(lat, lng, date)
  } finally {
    release()
  }
}