Skip to content

Instantly share code, notes, and snippets.

@bamnet
Last active July 22, 2019 03:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bamnet/37aee0e273a065470c77733313996533 to your computer and use it in GitHub Desktop.
Save bamnet/37aee0e273a065470c77733313996533 to your computer and use it in GitHub Desktop.
import { RateLimiter } from 'limiter';
export class PlacesService extends google.maps.places.PlacesService {
rateLimiter = new RateLimiter(2, 'second');
async findPlaceFromQueryAsync(req: google.maps.places.FindPlaceFromQueryRequest) {
await this.waitForToken();
return new Promise(
(
resolve: (result: google.maps.places.PlaceResult[]) => void,
reject: (status: google.maps.places.PlacesServiceStatus) => void
) => {
super.findPlaceFromQuery(req, (results, status) => {
if (status == google.maps.places.PlacesServiceStatus.OK) {
resolve(results);
} else {
reject(status);
}
});
});
}
private async waitForToken() {
return new Promise((resolve) => {
this.rateLimiter.removeTokens(1, () => resolve());
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment