亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 javascript 中將函數放入 event.respondWith() 中以返回響應

如何在 javascript 中將函數放入 event.respondWith() 中以返回響應

BIG陽 2023-08-10 15:33:07
我有一個服務工作者,如果它是某種類型,它應該返回緩存的文件。如果沒有,它應該獲取資源。我將檢查文件是否為某種類型的代碼放在 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"})});                    }                });            });        }    }    );});我知道這可能不是最好的方法,但如果有其他方法,我很樂意改進它以獲得最佳實踐。
查看完整描述

1 回答

?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

我找到了如何做到這一點。由于 event.respondWith() 接受響應而不是函數,因此如果您給它一個函數,它會將其視為響應,但不會運行它。您所要做的就是調用 IIFE(立即調用函數表達式),這樣您的函數就會被執行并返回響應。IIFE 語法:


(function{

   console.log("I was run immediately after I was created!");

})();


查看完整回答
反對 回復 2023-08-10
  • 1 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號