You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中Realm数据库JSON预填充报错求助

解决Realm预填充JSON数据的报错问题

嘿,我刚瞅了你的代码和报错信息,一眼就找到问题啦!那个Possible Unhandled Promise Rejection错误的核心原因是:你调用realm.create()方法时,第一个参数传错了——你传了整个databaseSchema配置对象,但Realm要求这里必须是schema的名称字符串(也就是你定义的'Books')。

错误代码的问题点

看你这段代码:

booksdata.forEach(obj => realm.create(databaseSchema, { 
  id: Math.floor(Date.now() / 1000),
  name: obj.name,
  author: obj.author,
  publisher: obj.publisher,
}));

这里第一个参数用了databaseSchema,但它是包含path、schema等的配置对象,而Realm的create方法第一个参数需要的是你定义的schema名称('Books'),这就导致了objectType must be of type 'string'的报错。

修正后的完整代码

Schema文件修改:

import booksdata from './books.json'; 
const Realm = require('realm'); 

const BooksSchema = { 
  name: 'Books', 
  primaryKey: 'id', 
  properties: { 
    id: 'int', 
    name: 'string', 
    author: 'string', 
    publisher: 'string', 
  }, 
}; 

const databaseConfig = { 
  path: 'books.realm', 
  schema: [BooksSchema], 
  schemaVersion: 0, 
}; 

export const mountData = () => new Promise((resolve, reject) => { 
  Realm.open(databaseConfig) 
    .then((realm) => { 
      realm.write(() => { 
        // 这里把第一个参数改成schema名称'Books'
        booksdata.forEach(obj => realm.create('Books', { 
          // 注意:如果你的books.json里本身有唯一的id,建议用obj.id,避免重复
          id: Math.floor(Date.now() / 1000), 
          name: obj.name, 
          author: obj.author, 
          publisher: obj.publisher, 
        })); 
      }); 
      resolve(realm); // 别忘了resolve promise,让调用方知道操作完成
    })
    .catch(error => reject(error)); // 捕获Realm.open的错误,传递给调用方
}); 

Index文件的componentDidMount可补充成功处理逻辑:

componentDidMount() { 
  mountData()
    .then(() => alert('数据预填充成功!'))
    .catch((error) => { 
      alert(`Insert error ${error}`); 
    }); 
} 

额外提醒

  1. 确保你的books.json是一个合法的数组,每个元素都包含name、author、publisher字段;
  2. 关于id:你现在用时间戳生成,但如果多次调用mountData会生成重复id(因为时间戳每秒变一次),如果books.json里本身有唯一id,直接用obj.id更稳妥;
  3. 不要忘记在Promise里处理resolve和reject,避免出现未处理的Promise拒绝警告。

内容的提问来源于stack exchange,提问作者Shifali Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:17:47