在Ember数据中,findAll()没有以正确的顺序返回数组,但API以预期的顺序返回数组

pokxtpni  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(147)

因此,有一个API,/names
这将返回从后端排序的名称列表。
这个调用被findAll()方法屏蔽在前端的ember-data中。
现在有另一个名为 /addName 的API,它向数据库添加名称。
现在,在添加了一个名称,并通过一些UI事件从前端调用findAll()之后,它以错误的方式返回顺序。
它首先返回所有已排序的现有名称,然后追加新创建的名称,但刷新前端可以解决这个问题。
当我 console.log-艾德findAll()响应时,我可以看到相同的模式,即现有名称排序,然后附加新创建的名称,当我console-logged API响应时,它以正确的方式打印所有名称,包括新创建的名称。

示例

existing db: ["A","D","Z"]

/addName "B"
db: ["A","B","D","Z"]

findALL():
["A","D","Z","B"]

字符串
为什么会这样?

eivgtgni

eivgtgni1#

findAll()没有以正确的顺序返回数组的原因是Ember Data缓存了API调用的结果。当您第一次调用findAll()时,Ember Data将向API发出请求并将结果存储该高速缓存中。下一次调用findAll()时,Ember Data将简单地返回该高速缓存中的结果,即使API从那时起已经更新。
要解决这个问题,需要在调用findAll()之前清除该高速缓存。您可以通过调用store.clear()方法来完成此操作。这将强制Ember Data向API发出新请求并返回最新结果。
下面是一个如何清除该高速缓存然后调用findAll()的示例:

// Clear the cache
this.store.clear();

// Call findAll()
this.store.findAll('name');

字符串
一旦清除该高速缓存,findAll()应该以正确的顺序返回数组。
以下是刷新前端解决此问题的可能解释。刷新前端时,Ember Data将强制重新初始化存储。这将清除该高速缓存并强制Ember Data向API发出新请求。因此,findAll()将以正确的顺序返回最新的结果。

相关问题