Ember.js 强制余烬存储跳过缓存并从API调用获取数据

Ember.js 强制余烬存储跳过缓存并从API调用获取数据,ember.js,ember-data,Ember.js,Ember Data,我试图理解,当我使用findAll时,如何强制ember store进行另一个api调用,而不是从缓存中获取记录。我知道如果记录已经加载,那么余烬将返回缓存数据,除非要求跳过它。在做一些研究(博客、文档和堆栈溢出)时,人们建议对findAll使用reload:true标志,但这对我不起作用。当我执行reload:true标志时,store仍然会从缓存中返回数据 如果我遗漏了什么,请帮忙 我有: fetchStudentData() { this.get('store').findAll('

我试图理解,当我使用findAll时,如何强制ember store进行另一个api调用,而不是从缓存中获取记录。我知道如果记录已经加载,那么余烬将返回缓存数据,除非要求跳过它。在做一些研究(博客、文档和堆栈溢出)时,人们建议对findAll使用reload:true标志,但这对我不起作用。当我执行reload:true标志时,store仍然会从缓存中返回数据

如果我遗漏了什么,请帮忙

我有:

fetchStudentData() {
   this.get('store').findAll('student').then((response) => {
         return response.data;
   });
}
此函数绑定到一个按钮,因此单击后需要重新启动API调用。我替换了商店呼叫以使用:

this.get('store').findAll('student', { reload: true }).then((response) => {
         return response.data;
   });

但这也没有帮助,因为它仍然返回了存储缓存中的旧记录。

我不熟悉您遇到的问题,但如果您根本不关心缓存,您可以这样做:

async myMethod() {
  this.store.unloadAll('student');
  let students = await this.store.findAll('student');
}

关于您的查询,让我感到困惑的是您正在执行
响应。数据
中然后
,我知道
数据
是原始json负载上的一个属性,但是所有返回值的
存储
方法都返回模型。因此,您将取回学生实例而不是原始json(如果您想要原始json(我建议您不要这样做),您可以使用
fetch
)。

我不熟悉您遇到的问题,但如果您根本不关心缓存,您可以这样做:

async myMethod() {
  this.store.unloadAll('student');
  let students = await this.store.findAll('student');
}


关于您的查询,让我感到困惑的是您正在执行
响应。数据
中然后
,我知道
数据
是原始json负载上的一个属性,但是所有返回值的
存储
方法都返回模型。因此,您将取回学生实例而不是原始json(如果您想要原始json(我建议您不要这样做),您可以使用
fetch
)。

您现在有什么代码?让我用我的代码更新帖子。@NullVoxPopuli有任何评论吗?添加了答案,让我知道它是怎么回事!您能更详细地描述一下您的用例吗?为什么要强制重新加载?它是关于清除存储中已经在API上删除的记录吗?据我所知,
this.store.findAll('my-model',{reload:true})
将强制重新加载,但这只会更新现有记录并添加新记录。它不会删除本地存储中已存在但API未返回的任何记录。这就是你面临的问题吗?你现在有什么代码?让我用我的代码更新帖子。@NullVoxPopuli有什么评论吗?补充回答,让我知道它是怎么回事!您能更详细地描述一下您的用例吗?为什么要强制重新加载?它是关于清除存储中已经在API上删除的记录吗?据我所知,
this.store.findAll('my-model',{reload:true})
将强制重新加载,但这只会更新现有记录并添加新记录。它不会删除本地存储中已存在但API未返回的任何记录。这就是您面临的问题吗?回答。您可以忽略的数据,因为我刚刚给出了一个示例,yeah store会将它们转换为模型。但主要的问题是太多的缓存无效,并再次命中API端点。我尝试卸载所有,但它是一个异步操作,不知何故卸载后的新API调用不起作用什么不起作用?如果unloadAll是异步的,只需在itthanks前面加一个
await
,但需要注意的是文档中说要使用reload:true标志,所以每次加载具有此类调用的路由时,它都会发出另一个API请求。但我只在加载路由时看到它一次,之后每次它从缓存中取出时,我都可以尝试,它的内部代码不能有类似的模式,但如果我能放一些几乎相似的东西,我会尝试。Bdw我试着放置控制台,但在网络选项卡(也在幻影中测试)响应中第一次之后从未看到新的API调用。您可以忽略数据,因为我只是给出了一个示例,yeah store会将它们转换为模型。但主要的问题是太多的缓存无效,并再次命中API端点。我尝试卸载所有,但它是一个异步操作,不知何故卸载后的新API调用不起作用什么不起作用?如果unloadAll是异步的,只需在itthanks前面加一个
await
,但需要注意的是文档中说要使用reload:true标志,所以每次加载具有此类调用的路由时,它都会发出另一个API请求。但我只在加载路由时看到它一次,之后每次它从缓存中取出时,我都可以尝试,它的内部代码不能有类似的模式,但如果我能放一些几乎相似的东西,我会尝试。Bdw我试着放置控制台,但在网络选项卡中第一次之后从未看到新的API调用(在mirage中也进行了测试)