50 Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von pseudonym Einsteiger_in (41 Punkte)

Hi Leute,

Folgendes Problem:

Ich habe eine Funktion geschrieben, mit dessen Hilfe ich eine SQLite-Datenbank auslesen kann:

import * as SQLite from 'expo-sqlite';

// zeige alle Einträge einer Tabelle

export function showContentOfTable(dbtable_name){

let status = false;

  db.transaction(tx => {tx.executeSql("SELECT * FROM " + table_name + ";", [], 

                (txresult=> {if(result.rows._array.length == 0){

                                  console.log("Kein Eintrag vorhanden :-(");

                                 }else

                                  console.log(result.rows._array);

                                  

                                  status = true;

                                }},

                                  () => {console.error("Tabelle '" + table_name + "' nicht gefunden :-(")})})

return status;

};

Die Funktion selbst funktioniert auch. Nun will ich, dass mir die Funktion einen booleschen Wert zurückgibt. Allerdings funktioniert das nicht so, wie ich das aus anderen Programmiersprachen (C#, Python, PHP, PowerShell...) kenne. Kann mir jemand erklären, wie ich den Wert von status zurückgeben kann?

Liebe Grüße und ein schönes Wochenende ;)

4 Antworten

0 Punkte
Beantwortet von computerschrat Profi (26.4k Punkte)
Hallo,

die Rückgabe funktioniert schon genau so, wie du es geschrieben hast. Wie sieht denn der Funktionsaufruf aus und wie übernimmst du den Rückgabewert?

Gruß computerschrat
0 Punkte
Beantwortet von pseudonym Einsteiger_in (41 Punkte)

Hey,

hier ein Auszug meiner App (ich arbeite mit React Native):

... 

const checkInput = (input=> {

    setInput(input.replace(/[^0-9]/g""));

    if(input.length == 13 && /^[0-9]+$/.test(input)) // sind alle Zeichen Ziffern?

      if(checkDigit(input) == input.substring(input.toString().length - 1))

        Alert.alert("Hinweis""Soll die eingegebene Nummer " + input + " in einen Barcode umgewandelt werden?",

                    [{text: "Ja"onPress:() => {

                      setStatus(true)

                      convert2Barcode(input)

                      if(showContentOfTable(initDB(), "customer") == false){ // kein Eintrag vorhanden?

                        console.log("test")

                        insertIntoTable(initDB(), "customer"inputconvert2Barcode(input))

                      }else{

                        console.log("test2")

                        updateTable(initDB(), "customer"inputconvert2Barcode(input))

                      }

                    }},

                     {text: "Nein"onPress:() => setInput("")}]);

      else

        Alert.alert("Fehler""Die eingegebene Nummer " + input + " ist ungültig! Bitte versuchen Sie es erneut.",

                    [{text: "OK"onPress: setInput("")}]);

    else if(input.length < 13 && itsStatus != false)

      setStatus(false);

}

...

Wenn ich mir den Protoypen der Funktion showContentFromTable anschaue, zeigt er mir als Rückgabetyp zwar boolean an, gibt aber lediglich den Wert der ersten Definition (let status = false) zurück. Er ignoriert die erneute Wertzuweisung.

0 Punkte
Beantwortet von computerschrat Profi (26.4k Punkte)
Ich sehe beim Aufruf  kein Problem. Deklariere die Variable status mal testweise nicht mit let, sondern mit var.  Let deklariert eine lokale, var eine globale Variable. Eigentlich sollte der Gültigkeitsbereich der let-Deklaration innerhalb der gesamten Funktion sein, aber da könnte es auch mal ein Problem geben.

Gruß computerschrat
0 Punkte
Beantwortet von pseudonym Einsteiger_in (41 Punkte)
ausgewählt von pseudonym
 
Beste Antwort

Hi,

leider funktioniert auch die Deklaration mit var nicht :(. Ich hab gelesen, dass die Zuweisung von Variablen mittels des sog. Hoisting funktioniert (https://developer.mozilla.org/de/docs/Glossary/Hoisting). Es wird allerdings nicht erklärt, wie ich den Rückgabewert nun an eine übergeordnete Variable übergeben kann.

edit:

Habe nun eine Lösung gefunden :).

var status = false;

...

// zeige alle Einträge einer Tabelle

export const showContentOfTable = (dbtable_name=> {

  db.transaction(tx => {tx.executeSql("SELECT * FROM " + table_name + ";", [], 

                (txresult=> {if(result.rows._array.length == 0){

                                  console.log("Kein Eintrag vorhanden :-(");

                                 }else{

                                  console.log(result.rows._array);

                                  status = true;

                                }},

                                  () => {console.error("Tabelle '" + table_name + "' nicht gefunden :-(")})})

 return status;

};

Wenn ich die Funktion in einem Funktionsaudruck speicher und die Variable status außerhalb der Funktion deklariere, weist er den Wert auch richtig zu. Komische Sache mit JavaScript.

Egal. Ich danke für die Hilfe. Schöne Woche noch :).

Pseudonym

...