在fetchEvent中将请求作为响应返回

时间:2018-05-09 11:40:40

标签: javascript fetch service-worker fetch-api

在服务工作者内部,如果请求失败,我会尝试将发出的请求作为响应返回。它似乎很简单,但它不起作用。

事实上,当我尝试返回它时,即使使用.clone(),它也会返回一个空对象。

以下是代码:

fetch(event.request.clone())
      .catch((err) => {
        queue.addRequest(event.request)
        return new Response(JSON.stringify({ deferred: true, ...event.request }), {
          headers: new Headers({ "Content-Type": "application/json" })
        })
      })

它的反应总是:{ deferred: true }。别无其他。

有可能吗?

1 个答案:

答案 0 :(得分:1)

我刚刚找到了获取请求正文的方法并将其返回给我。

可以使用.json()来获取它,并使用请求正文返回一个承诺。

看起来像这样:

fetch(event.request.clone())
      .catch((err) => {
        queue.addRequest(event.request)
        return event.request.clone().json().then((requestBody) => {
          return new Response(JSON.stringify({ deferred: true, ...requestBody }), {
            headers: new Headers({ "Content-Type": "application/json" })
          })
        })
      })