微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用带有 responseWith

如何解决使用带有 responseWith

我有两段代码,我希望它们能以相同的方式工作,但它们没有 - 只有一个真正有效,我不知道为什么。

工作一个


    self.addEventListener('fetch',(e)=>{
    
       e.respondWith(handleRequest(e.request))
    
    })
    
    async function handleRequest(req){
      const res = await fetch(req);
      const cache = await caches.open(cacheName)
    
      if(res.ok){
        // add the response to the caches and return the response
        await cache.put(req,res.clone())
        return res;
    
      }else{
        const res = cache.match(req)
        return res
      }
    }

不工作


    self.addEventListener('fetch',(e)=>{
    
      
       e.respondWith(async () => {
    
        const res = await fetch(e.request);
        const cache = await caches.open(cacheName)
    
        if(res.ok){
          // add the response to the caches and return the response
          await cache.put(e.request,res.clone())
          return res;
        }else{
          const res = cache.match(e.request)
          return res
        }
       })
    
    })

谁能看出这是为什么?

解决方法

如@Ouruborus 所述,您只传递函数引用而不是函数结果。比较这两个例子

console.log(() => { return 'test' });

对比

console.log((() => { return 'test' })());

如果你像这样重写你的代码,它应该可以工作:

self.addEventListener('fetch',(e) => {
    e.respondWith((async () => {
        const res = await fetch(e.request);
        const cache = await caches.open(cacheName)

        if (res.ok) {
            // add the response to the caches and return the response
            await cache.put(e.request,res.clone())
            return res;
        } else {
            const res = cache.match(e.request)
            return res
        }
    })());
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。