Comments (13)
[email protected]已经更新,在这个版本中解决了你需要异步获取缓存的问题,我们在考虑解决异步缓存问题的时候,并没有简单地把全局的storageAdapater
更改为支持异步函数,这会让alova的其他函数比如setCache
、invalidateCache
、updateState
等变得不可用,同时正式场景下也不需要所有请求都支持异步缓存,因此在2.1.0中添加了受控缓存的功能来支持,同时把更复杂缓存的控制权交还给用户。
大致的用法就是在创建method实例时,将localCache参数指定为一个异步函数,在这个异步函数中返回自定义的缓存数据,然后就会将返回的数据当做命中的缓存来使用,具体的用法你可以看这边https://alova.js.org/zh-CN/next-step/controlled-cache
from alova.
[email protected]已经更新,在这个版本中解决了你需要异步获取缓存的问题,我们在考虑解决异步缓存问题的时候,并没有简单地把全局的
storageAdapater
更改为支持异步函数,这会让alova的其他函数比如setCache
、invalidateCache
、updateState
等变得不可用,同时正式场景下也不需要所有请求都支持异步缓存,因此在2.1.0中添加了受控缓存的功能来支持,同时把更复杂缓存的控制权交还给用户。大致的用法就是在创建method实例时,将localCache参数指定为一个异步函数,在这个异步函数中返回自定义的缓存数据,然后就会将返回的数据当做命中的缓存来使用,具体的用法你可以看这边https://alova.js.org/zh-CN/next-step/controlled-cache
谢谢😃,这个方案下,可以通过localStorage异步获取缓存,我还想问一下,
设置缓存可以在我第一次获取数据的时候,也可以在storageAdapater中,storageAdapater可以设置异步缓存,获取异步缓存才报了错,我应该如何选择,
异步缓存失效我想可以在缓存数据中加入时间戳,定期删除超时缓存。
from alova.
这次新增的受控缓存其实就是把更复杂的缓存需求交还给你,根据你的需求,我建议这样做:
- 第一次获取数据时,会发起请求获取文件数据,这个时候可以在获取文件的method实例(下面就称为实例A)的transformData中执行保存操作(transformData也支持异步函数),比如可以使用文件路径作为key,保存缓存时一起设置一个过期时间
- 在实例中设置localCache为异步函数获取指定文件的缓存,如果存在并且未过期则返回它,如果已过期则删除缓存并返回undefined,返回undefined表示不使用缓存,会继续发起请求。
这样的话,应该是可以解决你的问题。 关于transformData的使用可以看这边哦 https://alova.js.org/zh-CN/response-data-management/transform-response-data
谢谢😃,可以满足我的需求,我才发现上面的提问有的地方写错了,才造成了你的误解,最开始提问的localForage写成了localStorage,上一个中的localCache也写成了localStorage,非常感谢,我此前也有类似想法,觉得可以用Service Worker去实现,Alova的实现思路让我看到了一个新大门
from alova.
😁我后面理解了你的意思,不用谢,你也是在帮助改善alova。
from alova.
alova默认使用的存储适配器就是localStorage,它的api是同步的,如果你要使用localStorage的话,可以不设置存储适配器
from alova.
我希望使用indexDB,我有文件类的数据需要存储在indexDB中,我的场景是一个在线网盘,需要频繁获取文件夹中的文件,而且需要预览,希望alova存储适配器可以支持异步api
from alova.
我可以再深入了解下你的项目需求吗?我有几个问题:
- 获取文件这部分需求具体如何的?(我猜想:首次打开文件需要请求后预览,后续再次打开就直接取本地缓存,是这样的吗?)
- 项目中是不是只有部分请求会用到异步存储呢?比如只有在获取文件这个请求中?
- 请求文件时,响应数据以什么方式请求的?是直接一个blob二进制流吗?
from alova.
我可以再深入了解下你的项目需求吗?我有几个问题:
- 获取文件这部分需求具体如何的?(我猜想:首次打开文件需要请求后预览,后续再次打开就直接取本地缓存,是这样的吗?)
- 项目中是不是只有部分请求会用到异步存储呢?比如只有在获取文件这个请求中?
- 请求文件时,响应数据以什么方式请求的?是直接一个blob二进制流吗?
这个项目里文件存储和文件组织数据是分离的,文件组织信息中包括了文件的存储地址,
获取文件组织信息用了useRequest内存模式缓存,
当用户要预览文件时,会从文件的存储地址中异步读取二进制流,根据文件类型预览,
这个时候希望可以使用Alova请求restore模式缓存在indexDB中,下一次预览就不需要从服务器请求
from alova.
那文件的缓存时长是如何的,是固定的还是动态的?以及,如果文件在其他地方修改了,用户那边可能还有缓存,你期望这里的效果是要怎样的?
from alova.
那文件的缓存时长是如何的,是固定的还是动态的?以及,如果文件在其他地方修改了,用户那边可能还有缓存,你期望这里的效果是要怎样的?
缓存时长我希望设置成30天,每次读取缓存后,更新这个时间,超过30天没有读取这个缓存就自动删除掉。
如果另一个用户在其他地方修改文件,也只能修改文件的组织信息或自身信息,比如所在文件夹,文件名,而存储地址和hash值不会变,不会影响到缓存的key,另一个用户可以删除文件,所以希望超过一定时间没有访问的缓存自动可以删除。
from alova.
明白了,这两天我考虑下改进方案,感谢你的反馈哦😃
from alova.
明白了,这两天我考虑下改进方案,感谢你的反馈哦😃
谢谢😃
from alova.
这次新增的受控缓存其实就是把更复杂的缓存需求交还给你,根据你的需求,我建议这样做:
- 第一次获取数据时,会发起请求获取文件数据,这个时候可以在获取文件的method实例(下面就称为实例A)的transformData中执行保存操作(transformData也支持异步函数),比如可以使用文件路径作为key,保存缓存时一起设置一个过期时间
- 在实例中设置localCache为异步函数获取指定文件的缓存,如果存在并且未过期则返回它,如果已过期则删除缓存并返回undefined,返回undefined表示不使用缓存,会继续发起请求。
这样的话,应该是可以解决你的问题。
关于transformData的使用可以看这边哦 https://alova.js.org/zh-CN/response-data-management/transform-response-data
from alova.
Related Issues (20)
- [Bug]: `usePagination`的`pageCount`没有自动计算,导致一直为0 HOT 2
- [Optimized item]: 使用`useSQRequest`报错时,`[alova/useSQHook]`前缀优化
- [Bug]: Uniapp的 localCache mode='placeholder' 无法正确运行 HOT 7
- [Bug]: 在`createAlovaMockAdapter`中的`onMockResponse`抛出错误,控制台还会提示请求成功
- [Bug]: 在`useSQRequest`的`middleware`中调用`next`无法获得响应数据
- [Bug]: `useSQRequest.onBeforePushQueue`设置为异步回调时无法获取返回数据 HOT 1
- [Bug]: `useForm`在多步骤表单中`loading`不变且`onSuccess`多次触发
- [Bug]: Uniapp的适配器与tokenAuthentication所导出两个方法会产生类型报错
- [Bug]: 基于服务端Token认证,refreshTokenOnSuccess的handler中,调用最近请求接口无响应 HOT 4
- [Bug]: usePagination对加载异常的页数会认为加载成功了 HOT 10
- [Bug]: 在 `Uniapp` 环境中,`useFetcher` 的 `force` 属性无效,依旧击中缓冲数据 HOT 2
- [Bug]: `useRequest` 返回的 data 得到的默认类型推断不正确 HOT 1
- [Bug]: `@alova/psc`无法在多个进程**享内存 HOT 1
- [Bug]: Response Headers 不存在 HOT 3
- [Bug]: `rate-limit`组件重置的倒计时未减少 HOT 1
- [Bug]: 使用 `useForm` 与 `usePagination` 时部分返回类型不符合期望
- [Bug]: 请问关于 `useForm` 的解构出 `form` 的类型any是正确的? HOT 1
- [Bug]: React not re-rendering view after state change (useRequest immediate=true) HOT 10
- [Bug]: hook not refreshing with PreactJS HOT 8
- [Bug]: `vue` 下 `useRequest` 返回值中的 `loading` 类型错误 HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from alova.