如何异步打开领域(JavaScript)对象并将其与服务一起使用
我在我的项目中使用以下代码异步打开领域,并将其用于服务 RmProfile.js: 现在,为了在其他文件中使用领域服务,我只是尝试导出 Profile.js: 在这里,服务被导出,但错误像RmPrfl未定义一样出现。这是在异步执行Realm.Open()时发生的,在其执行结束之前,将执行ProfileServices 由于我是Realm新手,有谁能指导我如何使用RealmJavaScript实现异步事务 任何例子都很好理解如何异步打开领域(JavaScript)对象并将其与服务一起使用,javascript,realm,Javascript,Realm,我在我的项目中使用以下代码异步打开领域,并将其用于服务 RmProfile.js: 现在,为了在其他文件中使用领域服务,我只是尝试导出 Profile.js: 在这里,服务被导出,但错误像RmPrfl未定义一样出现。这是在异步执行Realm.Open()时发生的,在其执行结束之前,将执行ProfileServices 由于我是Realm新手,有谁能指导我如何使用RealmJavaScript实现异步事务 任何例子都很好理解 谢谢你。你为什么不把一切都写在一个承诺里呢 let ProfileSer
谢谢你。你为什么不把一切都写在一个承诺里呢
let ProfileServices = () => {
getName: function(id) {
return new Promise((resolve, reject) => {
Realm.open({
schema: [PrflSchema],
schemaVersion: 0
})
.then(realm => {
let PrflInfo = realm.objectForPrimaryKey('Profile', id);
resolve(PrflInfo || false)
})
.catch(error => {
console.log('Error in Opening PrflSchema');
console.log(error);
reject(error)
});
})
}
}
module.exports = ProfileServices
import PrflSrvcs from './ProfileServices'
PrflSrvcs.getName('1253')
.then(name => { console.log(name) });
不过,您可能不想为每个查询打开领域,您可以在运行open之前缓存它并检查其存在性 你为什么不把这一切都写进一个承诺里呢
let ProfileServices = () => {
getName: function(id) {
return new Promise((resolve, reject) => {
Realm.open({
schema: [PrflSchema],
schemaVersion: 0
})
.then(realm => {
let PrflInfo = realm.objectForPrimaryKey('Profile', id);
resolve(PrflInfo || false)
})
.catch(error => {
console.log('Error in Opening PrflSchema');
console.log(error);
reject(error)
});
})
}
}
module.exports = ProfileServices
import PrflSrvcs from './ProfileServices'
PrflSrvcs.getName('1253')
.then(name => { console.log(name) });
不过,您可能不想为每个查询打开领域,您可以在运行open之前缓存它并检查其存在性 文档中不清楚,但它似乎是Realm.open(config)缓存承诺的领域本身,因此您实际上可以在每个查询中使用该API
# Initial Ream.open(): took 176.50000000139698 milliseconds.
# Manually Cached: took 0.5999999993946403 milliseconds.
# Second Realm.open(): took 0.19999999494757503 milliseconds.
因此,手动缓存只会产生一点额外的开销,而不会简化访问领域的API
以下是我使用的缓存功能:
private realm():承诺{
返回新承诺((解决、拒绝)=>{
if(this.cachedRealm){
解析(this.cachedRealm)
}否则{
Realm.open(this.config)
.然后(领域=>{
this.cachedRealm=realm
解析(领域)
})
.catch(错误=>{
控制台错误(error);
拒绝(错误)
});
}
})
}
文档中不清楚,但它似乎是Realm.open(config)缓存承诺的领域本身,因此您实际上可以在每个查询中使用该API
# Initial Ream.open(): took 176.50000000139698 milliseconds.
# Manually Cached: took 0.5999999993946403 milliseconds.
# Second Realm.open(): took 0.19999999494757503 milliseconds.
因此,手动缓存只会产生一点额外的开销,而不会简化访问领域的API
以下是我使用的缓存功能:
private realm():承诺{
返回新承诺((解决、拒绝)=>{
if(this.cachedRealm){
解析(this.cachedRealm)
}否则{
Realm.open(this.config)
.然后(领域=>{
this.cachedRealm=realm
解析(领域)
})
.catch(错误=>{
控制台错误(error);
拒绝(错误)
});
}
})
}
谢谢你的答案,我很久以前就从其他来源找到了答案,所以我的实现更像你的答案…谢谢你的答案,我很久以前就从其他来源找到了答案,所以我的实现更像你的答案。。。