RNFS.exists()始终返回TRUE

时间:2017-12-18 16:23:22

标签: react-native react-native-fs

我正在使用react-native-fs,出于某种原因,每当我使用exists()方法时,它总是返回为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")
}

控制台的输出是“FILE EXISTS”,然后抛出一个错误:

  

错误:ENOENT:没有这样的文件或目录,打开   /data/data/com.test7/files/userdata/settings.json'

如何使用exists方法而不是readFile方法存在?

在进一步检查时,无论文件名是什么,RNFS.exists()似乎总是返回true。为什么它总是回归真实?

path_name的显示显示为/data/data/com.test7/files/userdata/settings.json

即使我将代码更改为无意义的代码,如下面的代码:

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

它仍然评估为true并显示消息:

BLAH EXISTS

我已经显示了目录的内容并验证了这些文件不存在。

1 个答案:

答案 0 :(得分:11)

这是因为RNFS.exists()会返回Promise。将Promise对象置于if statement的测试中将永远为真。

请改为:

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

或者:

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