2017-12-18 3 views
2

Ich benutze react-native-fs und aus irgendeinem Grund, wenn ich die exists() Methode immer als TRUE zurückgibt. Eine Probe von meinem Code sieht wie folgt aus:RNFS.exists() liefert immer TRUE

let path_name = RNFS.DocumentDirectoryPath + "/userdata/settings.json"; 

if (RNFS.exists(path_name)){ 
    console.log("FILE EXISTS") 
    file = await RNFS.readFile(path_name) 
    console.log(file) 
    console.log("DONE") 
} 
else { 
    console.log("FILE DOES NOT EXIST") 
} 

Der Ausgang an der Konsole wird „Datei vorhanden“ ist, dann wird ein Fehler ausgelöst, der sagt:

Error: ENOENT: no such file or directory, open /data/data/com.test7/files/userdata/settings.json'

Wie kann es existieren die exists Methode , aber nicht die readFile Methode?

Bei weiterer Überprüfung scheint es, dass RNFS.exists() immer True zurückgibt, egal was der Dateiname ist. Warum kehrt es immer wieder wahr?

Eine Anzeige von path_name sagt /data/data/com.test7/files/userdata/settings.json.

Auch wenn ich meinen Code zu etwas unsinnig ändern wie den folgenden Code:

if (RNFS.exists("blah")){ 
    console.log("BLAH EXISTS"); 
} else { 
    console.log("BLAH DOES NOT EXIST"); 
} 

Es ist noch zu true ausgewertet und zeigt die Meldung:

BLAH EXISTS 

ich den Inhalt des Verzeichnisses angezeigt haben und verifiziert, dass diese Dateien nicht existieren.

+0

Versuch 'console.log' auf' path_name' von Fehlerprotokoll sieht es aus wie nicht richtig – Val

+0

@val Interessant, es sagt '/data/data/com.test7/files/userdata/settings.json'. Nicht sicher, warum es/Daten zweimal hat oder wenn es das ist, was es sein soll. – kojow7

+0

@Val Auch hatte ich ursprünglich "undefined" in meiner Fehlermeldung, obwohl ich denke, dass dies von einem Rechtschreibfehler von DocumentDirectoryPath in meinem Testfall war. Das ist jetzt behoben und ich habe meine Frage entsprechend angepasst. – kojow7

Antwort

2

Das ist, weil RNFS.exists() eine Promise zurückgibt. Setzen Sie ein Promise Objekt in einem Test von if statement wird immer wahr sein.

Tun Sie dies statt:

if (await RNFS.exists("blah")){ 
    console.log("BLAH EXISTS"); 
} else { 
    console.log("BLAH DOES NOT EXIST"); 
} 

Oder:

RNFS.exists("blah") 
    .then((exists) => { 
     if (exists) { 
      console.log("BLAH EXISTS"); 
     } else { 
      console.log("BLAH DOES NOT EXIST"); 
     } 
    });