如何选择正确的回调函数来使用Notification.requestPermission()函数?

4

Notification.requestPermission()函数已从基于回调的版本更改为基于Promise的版本。您可以在Mozilla文档中看到这一点。

如何选择当前浏览器的正确版本是最佳实践?我尝试使用以下代码:

 function callback(value) {
   // Do something
 }

 Notification.requestPermission(callback).then(callback);

如果有一个promise存在,这个方法是可行的。有时会触发两次回调函数。是否有办法进行预检查,以确定我需要的回调函数是正确的版本?


Notification.requestPermission.length 应该可以,你试试看? - Bergi
你的链接指向了文档的德语版本,请不要这样做。 - John Dvorak
为什么不坚持承诺版本? - John Dvorak
@JanDvorak 我已经更新了链接。抱歉。我想要处理大多数浏览器。回调版本已经使用了很长时间。因此可能存在一些不支持 Promise 版本的浏览器。 - SuperNova
1个回答

0

我已经自己找到了一个解决方案。不知道是否有更好的方法。

    var promise;
    var calledBack = false;

    if(!Notification || Notification.permission === 'denied')
      alert('Notification had been denied');
    else if(Notification && Notification.permission !== 'granted') {
      function callback(result) {
        if(!calledBack) {
          calledBack = true;

          if(result === 'granted') {
            // Do something
          }
        }
      }

      promise = Notification.requestPermission(callback);

      if(promise && typeof promise.then === 'function')
        promise.then(callback);
    }

回调函数检查它是否已被调用。如果requestPermission返回带有函数"then"的promise,则使用promise。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接