PeriodicSyc:如何解决未决的承诺?
PeriodicSyc: How to resolve the pending promise?
我想使用 webapi 实现后台同步,我需要几个不同的实现来实现特定的后台任务,例如 同步、更新检查和其他事情.
我的想法是创建一个 class BackgroundManager,我可以在其中实现 WebApi 并使我的实现继承自它。
使用这段代码,我可以创建一个继承 subscribe、unsubscribe 和 class 的实例=19=]从 BackgroundManager 获取订阅。
问题是我无法得到解决的承诺,我不明白为什么。
class BackgroundManager {
async subscribe() {
const registration = await navigator.serviceWorker.ready;
const type = this.type;
try {
await registration.periodicSync.register(type, {
minInterval: this.interval,
});
} catch {
console.log('Periodic Sync could not be registered!');
}
return 'subscribed'
}
async unsubscribe() {
const type = this.type;
const registration = await navigator.serviceWorker.ready;
if ('periodicSync' in registration) {
await registration.periodicSync.unregister(type);
}
return 'unsubscribed'
}
async getSubscriptions() {
const registration = await navigator.serviceWorker.ready;
if ('periodicSync' in registration) {
const tags = await registration.periodicSync.getTags();
return tags;
}
}
}
class Update extends BackgroundManager{
constructor(type) {
super();
this.type = type;
this.interval = 24 * 60 * 60 * 1000;
}
update() {
this.id = 'updating';
}
}
定期后台同步,目前在 Chrome 中实施,有一些先决条件,如 this article 中所述:
- 仅当渐进式网络应用已 installed.
时才有效
- 安装的 PWA 使用后台同步可能会限制用户 granting explicit permission。
如果不满足其中任何一个条件,则可以解释为什么您在使用该功能时遇到问题。
我想使用 webapi 实现后台同步,我需要几个不同的实现来实现特定的后台任务,例如 同步、更新检查和其他事情. 我的想法是创建一个 class BackgroundManager,我可以在其中实现 WebApi 并使我的实现继承自它。
使用这段代码,我可以创建一个继承 subscribe、unsubscribe 和 class 的实例=19=]从 BackgroundManager 获取订阅。 问题是我无法得到解决的承诺,我不明白为什么。
class BackgroundManager {
async subscribe() {
const registration = await navigator.serviceWorker.ready;
const type = this.type;
try {
await registration.periodicSync.register(type, {
minInterval: this.interval,
});
} catch {
console.log('Periodic Sync could not be registered!');
}
return 'subscribed'
}
async unsubscribe() {
const type = this.type;
const registration = await navigator.serviceWorker.ready;
if ('periodicSync' in registration) {
await registration.periodicSync.unregister(type);
}
return 'unsubscribed'
}
async getSubscriptions() {
const registration = await navigator.serviceWorker.ready;
if ('periodicSync' in registration) {
const tags = await registration.periodicSync.getTags();
return tags;
}
}
}
class Update extends BackgroundManager{
constructor(type) {
super();
this.type = type;
this.interval = 24 * 60 * 60 * 1000;
}
update() {
this.id = 'updating';
}
}
定期后台同步,目前在 Chrome 中实施,有一些先决条件,如 this article 中所述:
- 仅当渐进式网络应用已 installed. 时才有效
- 安装的 PWA 使用后台同步可能会限制用户 granting explicit permission。
如果不满足其中任何一个条件,则可以解释为什么您在使用该功能时遇到问题。