简体   繁体   English

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

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

I follow this tutorial: https://developers.google.com/web/fundamentals/codelabs/push-notifications#notification_click and implemented it to VueJS.我遵循本教程: https://developers.google.com/web/fundamentals/codelabs/push-notifications#notification_click并将其实现到 VueJS。

On the created hook, I run this function:在创建的钩子上,我运行这个 function:

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";
      }
    }

My console in Chrome, Safari and Firefox prints:我在 Chrome 中的控制台 Safari 和 Firefox 打印:

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

Does anybody know why swReg could be logged, but swRegistration not be assigned?有谁知道为什么 swReg 可以被记录,但 swRegistration 没有被分配?

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

Maybe because swRegistration is not defined?也许是因为swRegistration没有定义? Try to add let swRegistration at the top of your snippet, and everything will be ok.尝试在代码段顶部添加let swRegistration ,一切都会好起来的。 Enjoy.享受。

You should declare the swRegistration first, you don't face same issue with swReg because its the result of register promise.您应该首先声明 swRegistration,您不会遇到与 swReg 相同的问题,因为它是寄存器 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";
      }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM