如何使用 Cloudflare Worker 发出异步请求(非阻塞)

2023-12-23

我正在编写一个 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
}

你需要使用Event.waitUntil() https://developer.mozilla.org/en-US/docs/Web/API/ExtendableEvent/waitUntil延长请求的持续时间。默认情况下,一旦发送最终响应,所有异步任务都会被取消,但是您可以使用waitUntil()延长请求处理生命周期以适应异步任务。输入到waitUntil()必须是一个在任务完成时解决的 Promise。

所以,而不是:

await promise

do:

event.waitUntil(promise)

这是 Playground 中的完整工作脚本。 https://cloudflareworkers.com/#76a57f6b9a6de9c28063e9958f2833f3:https://tutorial.cloudflareworkers.com

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Cloudflare Worker 发出异步请求(非阻塞) 的相关文章