Google Map Api Javascript - event on error

Pozdrav,

jel ovo samo mene Google hebe u zadnje vrijeme ili su malo izgubili na stabilnosti? Svako malo u zadnje vrijeme mi pukne njihov API prema mapi i neće se ista učitati…kaže kao nešto ne valja sa API keyem. :confused:

Situacija danas:

  1. ne radi niti jedna mapa, kaže da ne valja API key
  2. odem u Google Consolu, uopće ne vidim da imam tamo registriran API key koji je na projektima. Hmm … (A svakako da sam ga relativno nedavno uvodio)
  3. uzmem neki testni već uvedeni api key iz console, samo da vidim hoće li sa njim raditi mapa
  4. mapa radi sa testnim api keyem
  5. odjednom sve mape rade i sa prethodnim API key-em kojeg i dalje ne vidim nigdje u konzoli…

Lagano zbljuv imam iskustvo u zadnje vrijeme što se tiče stabilnosti sa njihove strane…
A kako se u zadnje vrijeme često srećem sa tuđim web stranicama na kojima mape ne rade…nekako mi se čini da su ga baš malo ukenjali…


Nema druge nego ugraditi nekakav email warning da me upozori kada mape stanu radit.

No ako imam API key koji ne radi, consola vrisne sljedeću grešku:

screenShoot002

Problem je što mi ta greška ne trigira event window.onerror koji se trigira kod klasične JS greške.

Jel netko zna kako bi mogao hvatati ovu grešku? Hvala.

Sigurno ne najbolji nacin, ali bi mogao malo da override-as console.error

const interceptConsoleError = fn => {
  const handler = {
    apply(target, thisArg, args) {
      if (fn) {
        fn()
      }
      return target(...args)
    }
  }
  return new Proxy(console.error, handler)
}

const notify = () => {
  console.warn("notified")
}

console.error = interceptConsoleError(notify)
console.error("hello world")

Kad se poziva fn unutar handler mozes proslijediti neke informacije, tako da kasnije u notify funkciji mozes sa if provjeriti da li trebas poslati taj mail ili ne - u zavisnosti ko je uradio taj log (kako ces to provjeriti, to je na tebi).
Ponavljam, relativno hacky rijesenje ali bi trebalo odraditi posao.

Ima sigurno dosta drugih nacina da se override neka metoda sa konzole, ali meni je ova sa Proxy nacinom pala na pamet.

1 Like

Hvala na ovom, radi :wink:

Uvijek postoji bolji način, ali ovo tvoje je više nego zadovoljavajući pristup rješenju (što se mene tiče).
Dapače, više me veseli ovako rješiti problem nego da Google API nudi nekakav event on error. Jer, čim se logika veže na niže razine kodiranja, to je stvar robusnija i stabilnija. Teško da će se ovi low level principi samo tako izbaciti iz igre, dok Google API se već “sutra” može drugačije pozivati…i onda stvar pukne.

Nadalje, drugi plus, ovo je općenitije i šire primjenjivije rješenje nego kad bi se išlo preko Google API metode, jer ovako se mogu uhvatiti i mnoge druge stvari. :wink:

Tako da što se mene tiče, odličan pristup. Meni je totalno promaklo da se ovi errori mogu logirati direktno preko console.error metode, a ne preko JS eventa da skripta baci error :slight_smile: (Zato mi je error bio nevidljiv)

Ono što bi ja samo unaprijedio na tvom rješenju, takve stvari uvijek treba dovesti na razinu da se omogući fleksibilno kačenje/micanje eventa …tako da poziv tvog komada code-a u konačnici ide preko (već lagano poznate) sintakse:

consola.on('log',function(x){
	//your code...
});
consola.on('error',function(x){
	//your code...
});
consola.on('warn',function(x){
	//your code...
});
consola.on('info',function(x){
	//your code...
});
consola.on('any',function(eventType, x){
	//eventType = log | error | warn | info
	//your code...
});


//bindanje više operacija na isti event:

consola.on('log.someID1', function(x){
    	//your code...
    });

consola.on('log.someID2', function(x){
	//your code...
});

consola.unbind('log.someID1');

Hvala, case solved :wink: