我正在尝试创建一个与Service Worker配合使用的接口,但目前希望它能够写入缓存本身。
如果不可能,了解网络不可用时是否将使用过期的缓存资源将很有帮助。
编辑特别是Response公共构造函数不允许指定正文数据,并且Cache.put()需要Response
。
答案 0 :(得分:1)
我正在尝试创建一个与Service Worker配合使用的接口,但目前希望它能够写入缓存本身。
Cache Storage API在服务工作者内部很有用,但不仅限于ServiceWorkerGlobalScope
。在普通网页上,它也exposed为window.caches
。因此,您可以从网页或服务工作者(或web worker)读取和写入相同的缓存。
如果不可能,了解网络不可用时是否将使用过期的缓存资源将很有帮助。
在Cache Storage API中没有“过期的缓存资源”的概念。如果您要查询的是Cache-Control
头,则将有效地忽略已缓存的Response
中的Response
头。因此,只要将fetch
存储在缓存中,您就可以读取并使用它。但是不会自动使用任何内容-您需要专门设置服务工作者的fetch()
事件处理程序,并添加确定在各种情况下会发生什么的逻辑。可以在“ The Offline Cookbook”中找到关于如何编写服务工作者代码的良好概述。
例如,here's a fetch
handler会首先通过访问网络(通过self.addEventListener('fetch', function(event) {
event.respondWith(
fetch(event.request).catch(function() {
return caches.match(event.request);
})
);
});
)来响应所有网络请求,如果拒绝,则尝试使用相同URL的缓存响应进行响应:< / p>
import 'package:firebase_database/firebase_database.dart';
import 'User.dart';
import 'dart:async';
class FireDatabase{
FireDatabase();
DatabaseReference userRef = FirebaseDatabase.instance.reference().child("users");
DatabaseReference transactionsRef = FirebaseDatabase.instance.reference().child("transactions");
User user = new User();
getDatabaseUser(String cUid){
userRef.orderByChild(cUid).once().then((DataSnapshot data){
if (data.value!=null) {
return data.value;
} else {
print("prints - database.dart : data.value of user is empty/null");
return null;
}
},onError: (e){
print("prints - database.dart " + e.toString());
return null;
});
return null;
}
getDatabaseTransactions(String cUid) {
transactionsRef.orderByChild("transactions").once().then((DataSnapshot data){
if(data.value!=null) {
return data.value;
} else {
print("prints - database.dart : data.value of user is empty/null");
return null;
}
},onError: (e){
print("prints - database.dart " + e.toString());
return null;
});
return null;
}
getDatabaseTransaction(String cUid) {
transactionsRef.orderByChild(cUid).limitToFirst(1).once().then((DataSnapshot data){
if(data.value!=null) {
return data.value;
} else {
print("prints - database.dart : data.value of user is empty/null");
return null;
}
},onError: (e){
print("prints - database.dart " + e.toString());
return null;
});
return null;
}
}