Browser Notification.requestPermission().then()始终返回承诺对象,而不是控制台中已解析的拒绝值

Browser Notification.requestPermission().then()始终返回承诺对象,而不是控制台中已解析的拒绝值,browser,progressive-web-apps,Browser,Progressive Web Apps,在控制台中执行以下代码 Notification.requestPermission(function(status) { console.log('Notification permission status:', status); }); 在Chrome v 61中 返回 通知权限状态:“已授予” 如果已经给出,则在地址栏左侧附近会出现带有“允许”和“阻止”选项的弹出窗口 尽管在多次尝试之后,chrome也停止显示弹出窗口,并在控制台中向用户提供信息 返回 Notification

在控制台中执行以下代码

Notification.requestPermission(function(status) {
    console.log('Notification permission status:', status);
});
在Chrome v 61中

返回

通知权限状态:“已授予”

如果已经给出,则在地址栏左侧附近会出现带有“允许”和“阻止”选项的弹出窗口

尽管在多次尝试之后,chrome也停止显示弹出窗口,并在控制台中向用户提供信息

返回

Notification permission status: "denied"
带着信息

通知权限已被阻止,因为用户已解除 权限提示被多次删除。看见 更多 信息

但是

在FirefoxDeveloperEdition V57中

返回承诺对象,如下所示

Promise { <state>: "pending" }
Promise{:“待定”}
为什么我没有收到控制台消息,弹出窗口也没有出现

所以我的问题是我需要在firefox中配置一些东西吗

或者我缺少什么


注意:我已经尝试了MDN上建议的两种函数变体

承诺和回调是异步执行的。如果Firefox运行此命令,您看到的是承诺console.log将在将来执行的临时返回值。然而,console.log尚未执行

>> Notification.requestPermission().then(function(permission) { console.log(permission); });
← Promise { <state>: "pending" }
>Notification.requestPermission().then(函数(权限){console.log(权限);});
← 承诺{:“待定”}
基本上,你所看到的是按预期的方式工作。这类似于这样做:

>> let thing = Notification.requestPermission().then(function(permission) { console.log(permission); });
   console.log(thing);
Promise { <state>: "pending" }
← undefined
granted
>让thing=Notification.requestPermission().then(函数(权限){console.log(权限);});
console.log(东西);
承诺{:“待定”}
← 未定义
授予
console.log(thing)
正在记录将来工作的承诺,但是权限授予和
console.log(permission)
尚未执行

>> Notification.requestPermission().then(function(permission) { console.log(permission); });
← Promise { <state>: "pending" }

还有
Notification.requestPermission(回调)格式已被弃用,不应使用。

您可以参考此格式。清除浏览数据将清除该块。我想知道为什么firefox不调用通知弹出窗口,而chrome却这样做。