Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Globale Variable
#1
Hallo zusammen,

ich bin gerade am verzweifeln und finde keine Lösung.

Code:
let y=0;
var x=0;


function letztesY(Test){
    console.log("test: "+Test)
x=Test;

}


chrome.storage.local.get(null,  function(result)
{
    let anzahl=-1;
  
        //alle Keys mit "ETRetouren" anzeigen
        for (allKeys in result){
                                    if(allKeys.indexOf("ETRetoure")!=-1) { console.log(allKeys);
                                          
                                        chrome.storage.local.get(allKeys,  function(result){console.log(result);

                                            const myJSON = JSON.stringify(result);
                                 
                                        console.log(myJSON);
                                    let ZirETAuftrag=myJSON.substring(11,22);
                                 
                                    let Artikel=myJSON.substring(22,myJSON.indexOf(":")-1);
                               
                                    let Beschreibung=myJSON.substring(myJSON.indexOf(":")+2,myJSON.indexOf("||"));
                                                             
                                    let Menge=myJSON.substring(myJSON.indexOf("||")+2,myJSON.lastIndexOf('"'));

                                    document.querySelector("#Artikelauflistung").innerHTML+=`<tspan x="10" y="`+y+`">`+Menge+`</tspan>
                                   
                                                                                             <tspan x="43" Y="`+y+`">`+ZirETAuftrag+`</tspan>
                                                                                             <tspan x="123" y="`+y+`">`+Artikel+`</tspan>
                                                                                             <tspan x="203" y="`+y+`">`+Beschreibung+`</tspan>`;    
                                                                                             console.log(y);
                                                                                           
letztesY(y);
                                                                                             y+=20;                                                                                            
                                   
                                                                                            });
                                                                                          
                                                                           };
                                                                         
                                };
                            
                               }
                            // document.querySelector("#Artikelauflistung").innerHTML+=`<tspan X="10" y="`+(y=+60)+`">Datum"</tspan>
                            //                                                          <tspan x="150" y="`+(y=+60)+`">Mitarbeiter</tspan>`
                          
                            )


console.log(x);

ich möchte gerne den y Wert global bekommen und bekomme es nicht hin.
In oder aus der Function letztesY wird im log die richtigen werte angezeigt, doch im letzten bleibt die x Variable auf "0" wenn ich sie ganz untem im Code ausgeben möchte.
Wo ist der Fehler? Ich sehe es nicht

Gruß
Zitieren
#2
Alleine das schon

PHP-Code:
let Testvar;

function 
test(){Testvar=20;}

console.log(Testvar); 
bekomme ich im Log ein undefine.

Was mache ich falsch?
Zitieren
#3
Wenn du eine globale Variable haben möchtest, solltest du var statt let verwenden und die Variable ganz am Anfang deklarieren. Dann kannst du auch innerhalb der Funktionen auf diese Variable zugreifen.

Hier einige Seiten dazu:
https://www.mediaevent.de/javascript/glo...ablen.html

https://wiki.selfhtml.org/wiki/JavaScript/Variable
"Gerne dürft ihr mir eine gute Bewertung da lassen aber auch gegenüber Kritik bin ich offen" Angel
Zitieren
#4
überall steht auch das var veraltet ist und stattdessen let genommen werden sollte. Von daher habe ich mir nichts dabei gedacht das es an dem liegen soll.
werde es ml ausprobieren.
danke

klappt aber auch nicht. Wenn ich das letzte Bsp. nutze und let zu var ändere. bleibt Testvar undefine.

Aus einen deiner Links, die ich auch kenne. Steht z.B.

In JavaScript entstehen globale Variablen auf dreierlei Weise:
  1. wenn sie nicht durch varlet oder const deklariert wurden.


Wie kann ich denn eine Variable deklarieren ohne var, let oder const? Denn dort steht, wenn sie NICHT ...deklariert wurden

ok, den Fehler habe ich gefunden was das simple Bsp. betrifft. Man sollte die Function auch aufrufen damit es klappt Wink

Aber jetzt zu dem, wo das eigentliche Problem liegt

PHP-Code:
var letzterYWert;

var 
Testvar;<-- selbst wenn ich das auskommentieren würdebleibt letzterYWert zum schluss undefine

function test(Testvar){letzterYWert=Testvar;}






chrome.storage.local.get(null,  function(result)
{
    let anzahl=-1;
   
        
//alle Keys mit "ETRetouren" anzeigen
        for (allKeys in result){ 
                                    if(allKeys.indexOf("ETRetoure")!=-1) { console.log(allKeys);
                                           
                                        chrome
.storage.local.get(allKeys,  function(result){console.log(result);

                                            const myJSON JSON.stringify(result);
                                  
                                       
// console.log(myJSON);
                                    let ZirETAuftrag=myJSON.substring(11,22);
                                  
                                    let Artikel
=myJSON.substring(22,myJSON.indexOf(":")-1);
                                
                                    let Beschreibung
=myJSON.substring(myJSON.indexOf(":")+2,myJSON.indexOf("||"));
                                                              
                                    let Menge
=myJSON.substring(myJSON.indexOf("||")+2,myJSON.lastIndexOf('"'));

                                    document.querySelector("#Artikelauflistung").innerHTML+=`<tspan x="10" y="`+y+`">`+Menge+`</tspan>
                                    
                                                                                             <tspan x="43" Y="
`+y+`">`+ZirETAuftrag+`</tspan>
                                                                                             <tspan x="123" y="
`+y+`">`+Artikel+`</tspan>
                                                                                             <tspan x="203" y="
`+y+`">`+Beschreibung+`</tspan>`;     
                                                                                             
//console.log(y);
                                                                                             chrome.storage.local.set({'letzterYWert':y});
                                                                                            test(y);
                                                                                             
                                                                                             y
+=20;                                                                                             
                                    
                                                                                            
});
                                                                                           
                                                                           
};
                                                                                                          
                                
};
                               
                               
}
                          
                       
                            

PHP-Code:
console.log("Testvar: "+letzterYWert); <--- letzterYWert ist undefine 
letzterYWert bleibt undefine und finde den Fehler nicht
Zitieren
#5
In dem ersten Beispiel in deinem ersten Eintrag hast du die Funktion test() nicht aufgerufen. Eine leere Variable zeigt er immer als undefined an. Also erst test() aufrufen und dann via Konsole anzeigen lassen.
"Gerne dürft ihr mir eine gute Bewertung da lassen aber auch gegenüber Kritik bin ich offen" Angel
Zitieren
#6
das schrieb ich ja, das ich den Fehler gesehen habe.

Vielmehr geht es mir in dem Code

PHP-Code:
var letzterYWert;



function 
test(Testvar){letzterYWert=Testvar;}



chrome.storage.local.get(null,  function(result)
{
    let anzahl=-1;
   
        
//alle Keys mit "ETRetouren" anzeigen
        for (allKeys in result){ 
                                    if(allKeys.indexOf("ETRetoure")!=-1) { console.log(allKeys);
                                           
                                        chrome
.storage.local.get(allKeys,  function(result){console.log(result);

                                            const myJSON JSON.stringify(result);
                                  
                                       
// console.log(myJSON);
                                    let ZirETAuftrag=myJSON.substring(11,22);
                                  
                                    let Artikel
=myJSON.substring(22,myJSON.indexOf(":")-1);
                                
                                    let Beschreibung
=myJSON.substring(myJSON.indexOf(":")+2,myJSON.indexOf("||"));
                                                              
                                    let Menge
=myJSON.substring(myJSON.indexOf("||")+2,myJSON.lastIndexOf('"'));

                                    document.querySelector("#Artikelauflistung").innerHTML+=`<tspan x="10" y="`+y+`">`+Menge+`</tspan>
                                    
                                                                                             <tspan x="43" Y="
`+y+`">`+ZirETAuftrag+`</tspan>
                                                                                             <tspan x="123" y="
`+y+`">`+Artikel+`</tspan>
                                                                                             <tspan x="203" y="
`+y+`">`+Beschreibung+`</tspan>`;     
                                                                                             
//console.log(y);
                                                                                             chrome.storage.local.set({'letzterYWert':y});
                                                                                            test(y);
                                                                                             
                                                                                             y
+=20;                                                                                             
                                    
                                                                                            
});
                                                                                           
                                                                           
};
                                                                                                          
                                
};
                               
                               
}
                          
                       
                            
)
                   
                            chrome
.storage.local.get(null,function(result) {
                               
                            
                                                                          document
.querySelector("#Artikelauflistung").innerHTML+=`<tspan X="10" y="`+(result.letzterYWert+60)+`">Datum</tspan>
                                                                                                                                   <tspan x="150" y="
`+(result.letzterYWert+60)+`">Mitarbeiter</tspan>`

                                
                                
                            
});
                        

                            console
.log("Testvar: "+letzterYWert); 


letzterYWert am Ende des Codes wird als undefine ausgegeben. In der Function test oben, sind die werte drin wenn ich sie mir ausgeben lasse.

und wenn ich es richtig verstanden habe, dann müsste es ja vollkommen ausreichen der Variable letzterYWert einen Wert zuzuweisen, den ich am Ende des Codes abfragen könnte, anstatt über eine Function zu gehen.
Zitieren
#7
ich habe eine Lösung gefunden die erstmal läuft. Würde mich freuen wenn mir jemand beim verbessern helfen könnte.

Das Problem war, das die Ausgabe von "letzterYWert" kam, bevor "chrome.storage.local.get" fertig war.

Mit dem setTimeOut warte ich und gebe dann die Variable aus. 

Ich möchte jetzt gerne das ohne setTimeOut gelöst haben(kann ja mal zu verzögerungen kommen, das settimeout nicht ausreicht) und weiss nicht wie ich das umsetzen muss.

Function erledigt -> Ausgabe von "letzterYWert" .
gibt es da eine einfache Lösung?

mit async und await blicke ich ehrlich nicht durch. Wäre toll wenn jemand mir eine Lösung geben könnte
Zitieren
#8
(09.05.2023, 10:03)Oly schrieb: ich habe eine Lösung gefunden die erstmal läuft. Würde mich freuen wenn mir jemand beim verbessern helfen könnte.

Das Problem war, das die Ausgabe von "letzterYWert" kam, bevor "chrome.storage.local.get" fertig war.

Mit dem setTimeOut warte ich und gebe dann die Variable aus. 

Ich möchte jetzt gerne das ohne setTimeOut gelöst haben(kann ja mal zu verzögerungen kommen, das settimeout nicht ausreicht) und weiss nicht wie ich das umsetzen muss.

Function erledigt -> Ausgabe von "letzterYWert" .
gibt es da eine einfache Lösung?

mit async und await blicke ich ehrlich nicht durch. Wäre toll wenn jemand mir eine Lösung geben könnte

Okey super. Wie ich sehe arbeitest du mit Browsererweiterungen. Diese passen besser in den Bereich für Browsererweiterungen.
"Gerne dürft ihr mir eine gute Bewertung da lassen aber auch gegenüber Kritik bin ich offen" Angel
Zitieren
#9
ja das schon, aber betrifft es nicht auch allgemein ein Problem und nicht nur spezifisch Chrome.Extension?

Problem ist ja immer noch, wie bekomme ich einen Wert aus meiner Funktion?

Die Ausgabe ist vor der Beendigung der Funktion und somit nicht aktuell gefüllt

Mit SetTimeOut eine notdürftige Lösung, möchte aber gerne das mir der aktuelle Wert der Variable aus der Funktion ausgegeben wird, sobald die Funktion beendet wurde
Zitieren
#10
(09.05.2023, 18:38)Oly schrieb: [...] wie bekomme ich einen Wert aus meiner Funktion? [...]
Gar nicht!

Alle Werte, die in einer Asyncronen Funktion (hier der chrome.storage.local.get Callback) gesetzt werden, sind außerhalb des Scopes dieser Funktion nicht erreichbar.

Du musst also, wenn du mit dem Wert weiter arbeiten möchtest, in dem Scope des Callbacks bleiben und kannst nicht außerhalb auf den Wert der Variablen zugreifen.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen:
6 Gast/Gäste