【问题标题】:Fetch Data from WatermelonDB in React在 React 中从 WatermelonDB 中获取数据
【发布时间】:2019-02-24 16:03:52
【问题描述】:

我使用 WatermelonDB 作为我的应用程序的本地数据库。 我在 AccessDB 类中有一个方法 getPlaces()

static async getPlaces() {
        const postsCollection = database.collections.get('places');
        const allPosts = await postsCollection.query().fetch();
        return allPosts;
}

使用 AccessDB.getPlaces() 调用 getPlaces() 和 async 和 await 可以工作。如何获取与查询匹配的结果?

【问题讨论】:

    标签: javascript database reactjs react-native watermelondb


    【解决方案1】:

    变量allPosts 是一个数组,其中包含所有places。因此,要访问地点的属性,您可以在不同的类中执行:

    import AccessDB from './AccessDB';
    

    然后是某个地方,例如

    (async () => {
        try {
            const places = await AccessDB.getPlaces();
    
            var buffer = '';
            for (place in places) {
                buffer += places[place].name + '\n'
            }
            console.log(buffer)
        } catch(e) {console.log(e)}
    })()
    

    使用console.log调试的时候一定要小心,因为

    1) 如果一个接一个地快速执行,console.log 会跳过输出,例如如果您每次都在上面的 for 循环中 console.log 记录 places[place].name 并且

    2) 如果你console.log(places) 你看到的和console.log(database) 一样,这非常令人困惑。您会看到 [Object object],[Object object]...,当您使用 alert(places) 时会看到。

    【讨论】:

    • 你的第二点真的让我发疯了,我不知道。谢谢。
    【解决方案2】:

    也许我没有完全理解。但是您是否尝试将查询放入您的 query 方法中

    const allPosts = await postsCollection.query(Q.where('is_verified', true)).fetch();
    

    也不要忘记getPlaces 是异步的,您需要async\await 来获取返回数据。

    【讨论】:

    • 当我打印allPosts 时,我意识到allPosts 等于我的数据库对象。即database.collections.get('places') = database为什么不提取那些地方?
    猜你喜欢
    • 2022-08-05
    • 2023-01-02
    • 1970-01-01
    • 2021-12-23
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多