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}`); }); }
额外提醒
- 确保你的
books.json是一个合法的数组,每个元素都包含name、author、publisher字段; - 关于
id:你现在用时间戳生成,但如果多次调用mountData会生成重复id(因为时间戳每秒变一次),如果books.json里本身有唯一id,直接用obj.id更稳妥; - 不要忘记在Promise里处理
resolve和reject,避免出现未处理的Promise拒绝警告。
内容的提问来源于stack exchange,提问作者Shifali Gupta
相关产品推荐
相关产品推荐

