Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα! ;)

Αντιμετωπίζω ένα περίεργο πρόβλημα με πρόσβαση σε μεταβλητή ενός object.

Το console.log(data) λέει τα παρακάτω. Θέλω το data.ed και κυρίως, το data.ed.id όμως και τα δύο επιστρέφουν undefined.

Τι κουλό είναι πάλι αυτό; :P

 

Το JSON stringify βγάζει ότι είναι κυκλικό object. Καμιά ιδέα πως θα πάρω το data.ed.id?console.png.5224f8b7766dc64d838faf6f21655ec8.png

Δημοσ.

Σιγουρέψου ότι το data δεν έχει δηλωθεί σε άλλο scope από αυτό που το ζητάς (πχ σε κάποια άλλη συνάρτηση, block ή namespace) και επίσης ότι έχει δηλωθεί και έχει πάρει τιμές πριν από το σημείο που το ζητάς. Δοκίμασε επίσης αυτό αμέσως αφού το έχεις δηλώσει:

window['data'] = data;

και στην κονσόλα δοκίμασε αυτό:

console.log(window.data.ed.id);

Αυτό θα πρέπει να δουλέψει σε όποιο scope και αν έχει δηλωθεί.

 

22 ώρες πριν, philos είπε

Το JSON stringify βγάζει ότι είναι κυκλικό object.

Αυτό λογικά συμβαίνει γιατί κάποιο κλειδί αναφέρεται σε κάποιο γονικό αντικείμενο. πχ θα μπορούσε να υπάρχει κάτι τέτοιο:

data.ed.data = data;

 

Δημοσ. (επεξεργασμένο)

Λοιπόν παιδιά δοκίμασα αυτό από το stackoverflow και δούλεψε!

https://stackoverflow.com/questions/17546953/cant-access-object-property-even-though-it-shows-up-in-a-console-log

Τι κουλό είναι πάλι αυτό;

//The property you're trying to access might not exist yet. Console.log works because it executes after a small delay, but that isn't the case for the rest of your code. Try this:

var a = config.col_id_3;    //undefined

setTimeout(function()
{
    var a = config.col_id_3;    //voila!

}, 100);

 

Επεξ/σία από philos
Δημοσ.

Στη javascript δεν είναι ασυνήθιστο νομίζω, γιατί είναι ασύγχρονη. Αν το αντικείμενο το παίρνεις από κάπου στο ίντερνετ υπάρχει η πιθανότητα να μην έχει πάρει τιμή όταν ζητάς την τιμή του data.ed. Το παρακάτω παράδειγμα, του ασύγχρονου της javascript, είναι από εδώ: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Promises#using_the_fetch_api

const fetchPromise = fetch('https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json');

console.log(fetchPromise);

fetchPromise.then((response) => {
  console.log(`Received response: ${response.status}`);
});

console.log("Started request…");

Που έχει σαν αποτέλεσμα:

Promise { <state>: "pending" }
Started request…
Received response: 200

 

Δημοσ.
Στις 29/9/2022 στις 6:53 ΜΜ, node7 είπε

Στη javascript δεν είναι ασυνήθιστο νομίζω, γιατί είναι ασύγχρονη. Αν το αντικείμενο το παίρνεις από κάπου στο ίντερνετ υπάρχει η πιθανότητα να μην έχει πάρει τιμή όταν ζητάς την τιμή του data.ed. Το παρακάτω παράδειγμα, του ασύγχρονου της javascript, είναι από εδώ: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Promises#using_the_fetch_api

const fetchPromise = fetch('https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json');

console.log(fetchPromise);

fetchPromise.then((response) => {
  console.log(`Received response: ${response.status}`);
});

console.log("Started request…");

Που έχει σαν αποτέλεσμα:

Promise { <state>: "pending" }
Started request…
Received response: 200

 

Ειναι ασχετο αυτο που εγραψες με το θεμα του op. 

Δημοσ.

Είναι ξεκάθαρα θέμα async εδώ το ζήτημα. Ο op τραβάει από κάπου data και πάει να τα χρησιμοποιήσει σύγχρονα στον κώδικα ενώ έρχονται ασύγχρονα. Είτε κάνε sync το API call, είτε κάνε αλλαγή στον κώδικά σου να μπορεί να παίξει ασύγχρονα.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...