Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何异步打开领域(JavaScript)对象并将其与服务一起使用_Javascript_Realm - Fatal编程技术网

如何异步打开领域(JavaScript)对象并将其与服务一起使用

如何异步打开领域(JavaScript)对象并将其与服务一起使用,javascript,realm,Javascript,Realm,我在我的项目中使用以下代码异步打开领域,并将其用于服务 RmProfile.js: 现在,为了在其他文件中使用领域服务,我只是尝试导出 Profile.js: 在这里,服务被导出,但错误像RmPrfl未定义一样出现。这是在异步执行Realm.Open()时发生的,在其执行结束之前,将执行ProfileServices 由于我是Realm新手,有谁能指导我如何使用RealmJavaScript实现异步事务 任何例子都很好理解 谢谢你。你为什么不把一切都写在一个承诺里呢 let ProfileSer

我在我的项目中使用以下代码异步打开领域,并将其用于服务

RmProfile.js: 现在,为了在其他文件中使用领域服务,我只是尝试导出

Profile.js: 在这里,服务被导出,但错误像RmPrfl未定义一样出现。这是在异步执行Realm.Open()时发生的,在其执行结束之前,将执行ProfileServices

由于我是Realm新手,有谁能指导我如何使用RealmJavaScript实现异步事务

任何例子都很好理解


谢谢你。你为什么不把一切都写在一个承诺里呢

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);
拒绝(错误)
});
}
})
}

谢谢你的答案,我很久以前就从其他来源找到了答案,所以我的实现更像你的答案…谢谢你的答案,我很久以前就从其他来源找到了答案,所以我的实现更像你的答案。。。