我有一個服務工作者,如果它是某種類型,它應該返回緩存的文件。如果沒有,它應該獲取資源。我將檢查文件是否為某種類型的代碼放在 fetch 函數中。如果是,則返回緩存的版本。如果不是,則返回獲取的版本。但我發現,它發送一個網絡請求來獲取,然后返回緩存的版本(廢話)。我不想要這個,因為它取消了提供大文件的緩存版本而不是在可能的情況下獲取它的目的。我意識到我必須將 if then 語句放在獲取之外,但這意味著我將其作為參數放入。這是一個問題,因為它會引發錯誤。所以,我決定將它放在一個函數中。這會返回無效響應,所以我不知道我做錯了什么??隙ㄊ?event.respondWith() 內部的函數不能返回,但為什么呢?我的代碼是:this.addEventListener("fetch", function (event) { event.respondWith(function(){ //if the event request is a music file (I have it stored in a folder named music, so if the request is like "music/musicfile.mp3"), then returned the cached version. If not, fetch the file over the network. if(event.request.url.match(/music\//)){ return caches.match(event.request).then(function(r){ if(r){ return r; } else{ return fetch(event.request).then(function(fetchR){ return fetchR; }); } }); } else{ return fetch(event.request).then(function(res){ return res; }).catch(function(){ return caches.match(event.request).then(function(cacheRes){ if(cacheRes){ return cacheRes; } else{ return new Response("Error",{status : 520, statusText : "Error fetching cache", headers :new Headers({"Content-Type":"text/html"})}); } }); }); } } );});我知道這可能不是最好的方法,但如果有其他方法,我很樂意改進它以獲得最佳實踐。
如何在 javascript 中將函數放入 event.respondWith() 中以返回響應
BIG陽
2023-08-10 15:33:07