如何使用Cloudflare Worker创建异步请求(非阻塞)

Zac*_*oom 5 javascript cloudflare-workers

我正在编写一个Cloudflare Worker,需要在我的原始请求完成后ping一个分析服务.我不希望它阻止原始请求,因为我不希望延迟或分析系统的故障减慢或中断请求.如何创建在原始请求完成后开始和结束的请求?

addEventListener('fetch', event => {
  event.respondWith(handle(event))
})

async function handle(event) {
  const response = await fetch(event.request)

  // Send async analytics request.
  let promise = fetch("https://example.com")
      .then(response => {
    console.log("analytics sent!")
  })

  // If I uncomment this, only then do I see the
  // "analytics sent!" log message. But I don't
  // want to wait for it!
  //  await promise;

  return response
}
Run Code Online (Sandbox Code Playgroud)

Ken*_*rda 5

您需要使用它Event.waitUntil()来延长请求的持续时间.默认情况下,一旦发送最终响应,就会取消所有异步任务,但您可以使用它waitUntil()来延长请求处理生命周期以适应异步任务.输入waitUntil()必须是Promise,它在任务完成时解析.

所以,而不是:

await promise
Run Code Online (Sandbox Code Playgroud)

做:

event.waitUntil(promise)
Run Code Online (Sandbox Code Playgroud)

这是Playground中的完整工作脚本.