JavaScript 函数执行 consol.log(var) 但不执行 var2 = var

JavaScript function does consol.log(var) but doesn't var2 = var

我遵循本教程:https://developers.google.com/web/fundamentals/codelabs/push-notifications#notification_click 并将其实现到 VueJS。

在创建的钩子上,我运行这个函数:

register() {
      if ("serviceWorker" in navigator && "PushManager" in window) {
        console.log("Service Worker and Push is supported");

        navigator.serviceWorker
          .register("/sw.js")
          .then(function (swReg) {
            console.log("Service Worker is registered", swReg);
            swRegistration = swReg;
          })
          .catch(function (error) {
            console.error("Service Worker Error", error);
          });
      } else {
        console.warn("Push messaging is not supported");
        pushButton.textContent = "Push Not Supported";
      }
    }

我在 Chrome、Safari 和 Firefox 中的控制台打印:

"Service Worker and Push is supported"
"Service Worker is registered >ServiceWorkerRegistration"
"Service Worker Error ReferenceError: swRegistration is not defined"

有谁知道为什么可以记录 swReg,但没有分配 swRegistration?

.then(function (swReg) {
                console.log("Service Worker is registered", swReg);
                swRegistration = swReg;

可能是因为 swRegistration 没有定义?尝试在代码段的顶部添加 let swRegistration,一切都会好起来的。 享受吧。

你应该先声明swRegistration,你不会面临同样的问题 swReg 问题,因为它是 register promise 的结果。

register() {
      let swRegistration = null;
      if ("serviceWorker" in navigator && "PushManager" in window) {
        console.log("Service Worker and Push is supported");

        navigator.serviceWorker
          .register("/sw.js")
          .then(function (swReg) {
            console.log("Service Worker is registered", swReg);
            swRegistration = swReg;
          })
          .catch(function (error) {
            console.error("Service Worker Error", error);
          });
      } else {
        console.warn("Push messaging is not supported");
        pushButton.textContent = "Push Not Supported";
      }
    }