Closed tplive closed 5 years ago
Får en timeout error noen sekunder etter at siden er lastet. Aldri jobbet med Express før, eller Node. Men prøver i det minste.
Så bra! Beste måten å lære på det, å prøve! :) Har du hentet ned dependencies med npm install
og starter du appen med npm start
Jada får appen til å kjøre og lagt inn API nøkkel, men får bare Error, etter å ha gjort kall til API går det noen sekunder før Debugger(bruker VSCode) viser at det kommer en error og ikke response i funksjonen inne i geocode(). Erroren er timeout. Ser i API Dashboard hos google at jeg gjør kall til APIet, men at det er 100% error rate.
Ok, tenkte at siden du skrev at du ikke har brukt express før, at jeg skulle nevne basics.. 😊 Er ikke noen guru selv, men lærer underveis! 👍 Jeg får responsobj med lokasjon fra Google, og jeg får parset ut koordinatene inne i geocode() funksjonen, men de dataene blir ikke returnert fra funksjonen, ser nesten ut som jeg ikke har en return-statement, den returnerer bare undefined. Må se mer på det i morra tror jeg.. :)
Ja ikke meninga å virke brå tilbake :P Takker for all hjelp :)
Men du får da ut LanLet i Console vindu?
Returnerer undefined her også, også går det noen sekunder så får jeg en error på den nesta abstrakte funksjonen.
Får ut lat, lng i console ja, hvis jeg kaller den fra geocode() funksjonen. Men funksjonen returnerer bare undefined.. :-/
Vet wha issuen er. Må bruke async/await eller promise for så å returnere da. Og vente med å console.log til promise er resolved. Slet med det samme i den Yr xml til json formattereren jeg koda igår/natt 😅
Har nå prøvd å bruke async/await og new Promise og å bare auto wrappe i promise, men får bare "timeout" fra Google API, etter laaang tid( sikkert rundt 1 minutt før svar) Skjønner ikke korfor. Får derfor ikke testet om dette virker. Men skal jo egentlig fungere med callback funsjonen du har i funksjonen orginalt... Skjønner ikke dette. Virker for meg som et dårlig API også. Jeg har iallefall 100% error uansett hvilken API nøkkel jeg bruker, får "Timeout" uansett.
Spurte min gode venn (og JS-guru) om dette og han har funnet feilen. Vi prøvde også med async/await først, men API'et til Google returnerer ikke en promise, derfor funker ikke dette. Dersom vi i stedet skriver om funksjonen til å bruke Google sitt API direkte (https://maps.googleapis.com/maps/api/geocode/json?address=Mathias+Lunds+gate,Stjørdal&key=your-api-key-here ), får vi det som vi vil og vi kan returnere en promise og vi kan async'e app.get metoden istedet. Da fjerner vi dependency på google-pakken også. Jeg tror jeg finner tid til dette i ettermiddag/kveld.. :)
Er nok bedre å kalle API direkte da ja :) Får din måte til å returnere Promise også, ved å legge til slik når man lager Clienten:
const googleMapsClient = require('@google/maps').createClient({
key: API_KEY,
Promise: Promise
});
Også fjerner callback også legger til asPromise() og videre .then() og .catch() for errors:
function geocodeThis(address) {
googleMapsClient.geocode({
address: address
}).asPromise()
.then(response => {response.json.results})
.catch(err => {console.log(err)});
}
ref: https://stackoverflow.com/questions/26096030/adding-a-promise-to-a-google-maps-api-call
Men som du skriver over er nok direkte API kall best :) Fikk bare timeout med den metoden over, men prøv gjerne denne også bare for å se om det virker. Kjekt å prøve forskjellige veier :)
Har testet å skrive om funksjonen nå, men nå returnerer den [object Promise], så er ikke helt i mål enda. Pusher det bare opp nå, for jeg må ta opp tråden igjen hjemme.. :)
Det er jo et steg i rett retning. Prøvd dette på det objektet?
.then(location => {
console.log(location);
});
Fant ut av det til slutt. geocodeThis funksjonen returnerte et Promise, så da kan man kalle .then() direkte på den for å få funksjonen kjørt.
Jeg merget og slettet branchen jeg jobbet på, er ikke så glad i brancher som lever så lenge. :)
https://github.com/tplive/weather-wars/blob/b2eca3ed94a44db22ff29a259d046e88375ce384/gcloud-appengine/app.js#L35