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