PeriodicSyc:如何解决未决的承诺?

PeriodicSyc: How to resolve the pending promise?

我想使用 webapi 实现后台同步,我需要几个不同的实现来实现特定的后台任务,例如 同步、更新检查和其他事情. 我的想法是创建一个 class BackgroundManager,我可以在其中实现 WebApi 并使我的实现继承自它。

使用这段代码,我可以创建一个继承 subscribeunsubscribe 和 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 中所述:

如果不满足其中任何一个条件,则可以解释为什么您在使用该功能时遇到问题。