Javascript 从服务工作者获取错误消息

Javascript 从服务工作者获取错误消息,javascript,api,Javascript,Api,我正在使用Google Drive API,如果Google Drive访问令牌“过时”且未获得批准,我将尝试添加一个自定义错误函数。我可以在服务人员内部收到401消息,但我无法(或不知道如何)处理它。我想把它返回到JS主页并调用一个函数 script.js ////////////////////////////////////////////////////////////// //////////////// Initialize Background Sync /////////////

我正在使用Google Drive API,如果Google Drive访问令牌“过时”且未获得批准,我将尝试添加一个自定义错误函数。我可以在服务人员内部收到401消息,但我无法(或不知道如何)处理它。我想把它返回到JS主页并调用一个函数

script.js

//////////////////////////////////////////////////////////////
//////////////// Initialize Background Sync //////////////////
//////////////////////////////////////////////////////////////

function initSW() {
  console.log("Script: Called InitSW()");
  if ("serviceWorker" in navigator) {
    navigator.serviceWorker
      .register("serviceWorker.js")
      .then((registration) => navigator.serviceWorker.ready)
      .then((registration) => {
        registration.sync.register("sendFile-sync").then(() => {
          //Do Function using sync
          try {
            console.log("Script  : Sync Registered");
          } catch {
            console.log("Script : Sync Not Registered");
          }
        });
      });
  }
}
服务人员

self.addEventListener("sync", (e) => {
  if (e.tag === "sendFile-sync") {
    console.log("SW Sync : Sync Found!");
    e.waitUntil(fetchFile());
  } else {
    postMessage("There was an error registering your background sync."); // ??
    console.log("SW Sync : No Sync Found");
  }
});

//Function Called above when sync is fired

function fetchFile() {
  let openRequest = indexedDB.open("GoogleDrive", 4);

  openRequest.onerror = function () {
    postMessage("There was an error uploading your file, please try again.");
    console.log("SW Sync : There was an error");
  };

  openRequest.onsuccess = function () {
    let db = openRequest.result;

let transaction = db.transaction(["backups"]); // readonly
let backups = transaction.objectStore("backups");

let request = backups.get("1");

request.onsuccess = function (event) {
  let date = Date();

  let accessToken = request.result.access;
  console.log("SW Sync: Access Token -  " + accessToken);

  let BlobContent = request.result.text;

  let fileName;

  if (request.result.saveas !== "N") {
    fileName = request.result.saveas;
  } else {
    fileName = "Backup " + date; // Filename;
  };

  console.log(fileName);
  let file = BlobContent;
  let metadata = {
    name: fileName,
    mimeType: "text/plain", // mimeType at Google Drive

    // For Testing Purpose you can change this File ID to a folder in your Google Drive
    parents: ["root"], // Folder ID in Google Drive
  };

  let form = new FormData();
  form.append(
    "metadata",
    new Blob([JSON.stringify(metadata)], { type: "application/json" })
  );
  form.append("file", file);

  fetch(
    "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id",
    {
      method: "POST",
      headers: new Headers({ Authorization: "Bearer " + accessToken }),
      body: form,
    }
  )
    .then((res) => {
      return res.json();
    })
    .then(function (val) {
      console.log(val.error.code);
      if (val.error.code === 401) {
        console.log("Credentials are not correct to access Google Drive!");
      } else {
        // Updates IndexedDB 
      }
    })
    .catch((error) => {
      console.error('Error:', error);
    });
}
我没有包含所有的代码,但它本质上使用IndexedDB在serviceWorker和DOM之间传递数据