fixed lan and lon on post
This commit is contained in:
32
src/utils/ymapsApi.js
Normal file
32
src/utils/ymapsApi.js
Normal file
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
* public/index.html подключает API Яндекс.Карт через <script defer>,
|
||||
* поэтому к моменту первого рендера window.ymaps может быть ещё undefined:
|
||||
* скрипт не скачался, медленный CDN, блокировщик рекламы, офлайн.
|
||||
*
|
||||
* Без ожидания карта просто не создаётся — пользователь видит вечный спиннер
|
||||
* без единой ошибки. Поэтому ждём появления API, но с таймаутом, и отдаём
|
||||
* вызывающему явную ошибку вместо бесконечной загрузки.
|
||||
*/
|
||||
|
||||
const DEFAULT_TIMEOUT_MS = 10000;
|
||||
const POLL_INTERVAL_MS = 100;
|
||||
|
||||
export function whenYmapsReady(timeoutMs = DEFAULT_TIMEOUT_MS) {
|
||||
if (window.ymaps?.ready) return Promise.resolve(window.ymaps);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const startedAt = Date.now();
|
||||
|
||||
const timer = setInterval(() => {
|
||||
if (window.ymaps?.ready) {
|
||||
clearInterval(timer);
|
||||
resolve(window.ymaps);
|
||||
return;
|
||||
}
|
||||
if (Date.now() - startedAt >= timeoutMs) {
|
||||
clearInterval(timer);
|
||||
reject(new Error("YMAPS_LOAD_FAILED"));
|
||||
}
|
||||
}, POLL_INTERVAL_MS);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user