我使用的是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")
}

控制台的输出为"文件存在",然后抛出一个错误,说明:

错误:eNote:没有这样的文件或目录,请打开

它怎么能用exists法而不是readFile法存在?

进一步判断后,似乎RNFS.exists()总是返回true,无论文件名是什么.为什么它总是回归真实?

路径名称显示为/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

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

推荐答案

这是因为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");
        }
    });

React-native相关问答推荐

Reaction-Native-pdf文件不是PDF格式或已损坏

任务:react-native-async-storage_async-storage:generateReleaseRFile FAILED

React js 做通用头部

reactnavigation后退按钮的自定义后退导航

在 React 中使用 Lodash debounce 来防止在用户输入时请求数据

create-react-native-app myproject和react-native init myproject之间的真正区别是什么

React-Native 应用程序的 Jest 测试 Animated.View

如何在 React Native cli 中获取 SHA-1 密钥?

React Native - 用分机拨打电话号码

React Native:自定义字体在 Android 和 iOS 上呈现不同

props验证中缺少 React Navigation 'navigation'

使用 React Native 打开 iOS iPad 模拟器

react-native run-android 构建错误':app:generateDebugBuildConfig'

如何将捕获的图像与 react-native-camera 一起使用

react-native run-ios 运行失败: Application is unknown to FrontBoard?

Ipad 上的 React Native - 错误 - could not connect to development server

如何知道 FlatList 中的滚动状态?

React Native Build Error on IOS - typedef 用不同类型重新定义('uint8_t'(又名'unsigned char')与'enum clockid_t')

如何在 Android 手机上运行 React Native 应用程序

react-native构建错误:package android.support.annotation does not exist