如何为Notification.requestPermission()函数选择正确的回调

How can I chose the correct callback for Notification.requestPermission() function?

本文关键字:选择 回调 函数 Notification requestPermission      更新时间:2023-09-26
Notification.requestPermission((函数已从回调更改为基于promise的版本。您可以在Mozilla文档中看到这一点。

为当前浏览器选择正确版本的最佳做法是什么?我试过这样的东西:

 function callback(value) {
   // Do something
 }
 Notification.requestPermission(callback).then(callback);

如果有承诺,这是有效的。有时会触发两次回调。有没有任何方法可以预先检查,哪一个版本适合我需要的回调?

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

    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。