Javascriptben hogy kell átírni (helyettesíteni) az alábbi sort úgy, hogy továbbra se adjon hibát ha a konstans számok (11,12) helyett a már korábban definiált változókat szeretném használni? : const data = {varx: 11, vary: 12 };
Bármiyen ötletre vevő vagyok, kezdő vagyok a témában. De muszáj valahogy ezt sor használni/átgyúrni, mert egy tutorial programot akarok használni , aminek a következő sora :
const { varx, vary } = data;
nélkül nem működnek az utána lévő részek. Bármilyen tippnek nagyon örélnék.
let xx = 11;
let yy = 12;
const data = {varx: xx, vary: yy };
const { varx, vary } = data;
Itt csak összebogarásztam amiket te már eleve leírtál, persze működik hibátlanul.
Esetleg ha leírnád mi a "baj" vele, talán segíteni is tudnánk, most nem igazán érthető a célod.
Tippek:
Nem írtad, hogy külső forrásból való frissítés után a datában is frissülnie kell-e, de gondolom igen mivel azt mondtad "nem működik". Akkor vagy frissíted azon az eventen ahol új értéket kap az xx,yy is, így:
data.varx = xx;
data.vary = yy;
vagy ha az a két változó elérhető a jelenlegi scope-odban, akkor ez is megteszi:
const data = {
varx: function(){return xx;},
vary: function(){return yy;}
};
hívás így meg data.varx() lesz, és mindig az aktuális xx, yy értéket adja vissza.
Jó lett volna a részletek belemenése nélkül megúszni, de úgy látom nem megy. Van egy tutorial program, ami kirakja a kordináta pontot a térképre.
https://www.youtube.com/watch?v=nZaZ2dB6pow&t=56s
A változó kordinátaértékeket (az eredeti program) egy API-n keresztül kapja és adja át JSON lekéréssel a térkép/marker rajzoló résznek. Ezt a részt szeretném helyettesíteni a saját kordináta értékpárommal amit FirebaseDatabase-en keresztül kapok. Ehhez kellene átírni kb. 1-2 sort, amin már régóta görcsölök, de lehet hogy alábecsülöm a problémát.
az eredeti prog.részlet :
const api_url = ' [link]
async function getISS() {
const response = await fetch(api_url);
const data = await response.json();
const { latitude, longitude } = data;
marker.setLatLng([latitude, longitude]);
mymap.setView([latitude, longitude], );
}
getISS();
setInterval(getISS, 3000);
valami ilyesmire gondoltam :
/* const api_url = ' [link]
let firstTime = true; */
async function getISS() {
/* const response = await fetch(api_url);
const data = await response.json();
const { latitude, longitude } = data; */
var ref11 = firebase.database().ref().child('name1');
ref11.on('value', function(snapshot) {
var latitude = snapshot.val() ;
console.log(snapshot.val()) ;
});
var ref12 = firebase.database().ref().child('name2');
ref12.on('value', function(snapshot) {
var longitude = snapshot.val() ;
console.log(snapshot.val()) ;
});
const data = {latitude:?????????? , longitude:?????? };
const { latitude, longitude } = data;
marker.setLatLng([latitude, longitude]);
mymap.setView([latitude, longitude], );
}
getISS();
setInterval(getISS, 3000);
Leegyszerűsítve a kérdést, mit írjak a const data = .. sorba ?
Köszönöm az eddigi és a jövőbeni segítséget is.
Ennek a két sornak semmi értelme:
const data = {latitude:?????????? , longitude:?????? };
const { latitude, longitude } = data;
Berakod a longitude és tatitude értékét a datába csak hogy kivedd utána őket, ami ekvivalens ezzel:
const latitude = ??????????;
const longitude = ??????;
De a te problémád nem itt van. Én nem ismerem a firebase-t de úgy tűnik egy aszinkron callback hívás eredményét szeretnéd használni szinkron módon, amit nem lehet. A callback függvénybe kell beraknod a következő sorokat miután megvan az új latitude és longitude:
marker.setLatLng([latitude, longitude]);
mymap.setView([latitude, longitude], );
A probléma hogy abból kettő van tehát chainelni kell őket valamilyen módon, de biztos vagyok benne hogy tud promisokat is a firebase tehát abba az irányba kéne menni.
Callbackkel valahogy így kéne:
var ref11 = firebase.database().ref().child('name1');
var ref12 = firebase.database().ref().child('name2');
ref11.on('value', function(snapshot) {
var latitude = snapshot.val() ;
console.log(snapshot.val()) ;
ref12.on('value', function(snapshot) {
var longitude = snapshot.val() ;
console.log(snapshot.val()) ;
marker.setLatLng([latitude, longitude]);
mymap.setView([latitude, longitude], );
});
});
Gyors google kereséssel úgy tűnik tényleg lehet promisokat használni tehát innentől leegyszerűsödik az egész ennyire mivel a függvény async és lehet használni az await kulcsszót (ha nem lenne az akkor a Promise.all() megoldja):
const latitude = (await firebase.database().ref().child('name1').once('value')).val();
const longitude = (await firebase.database().ref().child('name2').once('value')).val();
marker.setLatLng([latitude, longitude]);
mymap.setView([latitude, longitude], );
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!