如何使用 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 发出异步请求(非阻塞) 的相关文章

随机推荐

  • 堆栈溢出:线程1:EXC_BAD_ACCESS(代码=2,地址=0x16d09aa00)

    崩溃描述 最近 我在我的一个 iOS Swift 项目中遇到了一种非常奇怪的内存问题 我真的不知道发生了什么 也觉得不太容易描述 但无论如何我会尽力的 它的行为基本上如下 在某个代码库上 崩溃总是发生在同一个地方 100 可重现 更改代码库
  • Anaconda:IPython/Jupyter Notebook 中的 Python 3 和 2

    我安装了 Anaconda 的 Python 3 并且希望能够在 python2 和 3 内核之间快速切换 这是在 OSX 上 到目前为止我的步骤包括 conda create p anaconda envs python2 python
  • Python re.sub() 行首锚定

    考虑以下多行字符串 gt gt print s shall i compare thee to a summer s day thou art more lovely and more temperate rough winds do sh
  • 我们如何检查一个数组是否包含#中另一个数组的一个或多个元素?

    我有一个字符串数组 例如 string names P A B G F K R 我有另一个数组 string subnames P G O 我们如何检查名称数组是否包含子名称数组的任何元素 在上面的示例中 名称中存在 P 和 G 这是一个
  • Bash:检查是否按下了 Enter

    How can I check in Bash if the Enter key has been pressed I m using the read command read p Please press ENTER var 首先检查退
  • 使用 argparse 解析字符串

    所以我希望argparse的输入是一个字符串而不是命令行 例如 python3 some script py arg1 arg2 arg3 我想给 argparse 字符串 arg1 arg2 arg3 import argparse co
  • 从浏览器历史记录中删除当前页面

    我正在我的网站上构建一个文本编辑器 工作流程如下 In list 用户从列表中选择他们想要编辑的条目 该列表会将他们带到 edit article id 用户完成工作 然后单击 提交 服务器处理该事物 并将它们重定向回 edit artic
  • Nuxt 为所有动态路由生成带有后备文件的静态站点

    我已经在整个互联网上搜索了我的问题的答案 到目前为止还没有运气 我想要实现的目标 我有一个在通用模式下运行的 Nuxt 应用程序 它就像一个小型社交网络 用户可以在其中创建自己的个人资料并分享他们的工作 因此 我正在使用动态路由 users
  • 我如何清理 mysql 上的临时表

    我们在程序中创建临时表 并且我们不使用 mysql 的持久连接 mysql重启后 有很多临时表慢慢增加 然后innodb buffer pool size正在整理 应用程序正在该服务器上运行 CPU E3 1245 v5 3 50GHz 8
  • 如何远程检查 RedisCloud 数据库中的数据?

    我使用 Heroku 托管一个简单的 Ruby on Rails 测试应用程序来学习如何使用 Redis 我使用 RedisCloud 作为我的 Redis 服务提供商 在本地 我可以使用 Redis CLI 检查我的 Redis 数据库
  • 如何为 Webstorm 编写自己的插件?

    我想为 WebStorm 编写一个专门的插件 可以为自定义框架提供帮助 有关于如何做到这一点的教程吗 没有可用的 WebStorm 特定指南 插件的创建方式与 IntelliJ IDEA 完全相同 http confluence jetbr
  • 使用数据绑定具有多个视图类型的 Android recyclerview 适配器

    是否可以在我的适配器中创建多个视图类型 例如为我的标题添加视图 然后标题下方是一个列表 我的适配器的代码片段 public class StoreAdapter extends RecyclerView Adapter
  • Mysql:显示另一列下方的列的值

    我真的陷入了这个困境 我通过准备一条可执行语句尝试了联合 我非常清楚 SQL 不是一种用于此类任务的语言 但到目前为止 目标是创建一个原型 实际的技术实施将在稍后发生 我会解释我的要求 有一个临时表 我在其中存储名称 项目以及与该项目相关的
  • arch linux 上的 asp.net core 2.1 无法运行

    我已经在 Arch Linux 上使用 pacman 安装了最新版本的 net core sudo pacman S dotnet sdk Running dotnet info显示正确的版本 Host useful for support
  • NSURLIsExcludedFromBackupKey 在 iOS 5.1 之前崩溃

    和许多 iOS 开发者一样 我在使用 5 1 之前的系统时也遇到过应用程序崩溃的问题NSURLIsExcludedFromBackupKey 很好地描述了如何评估该线程上该键的存在 在 iOS 5 0 上使用 NSURLIsExcluded
  • ASP.Net 复选框返回“是”或“否”值(而不是 True / False)

    我正在使用 C 和 ASP Net 3 5 并尝试从复选框获取 是 否 值 而不是 True False 有没有简单的方法或者我需要做 if 语句 一定要试试这个 string doesThisWork chkBox Checked Yes
  • 我应该把 php 文件放在哪里才能让 Xampp 解析它们?

    我完成了上网本 Ubuntu 10 和 XAMPP 的安装 XAMPP 网站教程使安装变得非常容易 但让我感到茫然无措 一切正常 但我不知道将我的手写 php 文件放在哪里 经过几个小时的谷歌搜索 并试图理解文件资源管理器 我意识到我不知道
  • Eclipse CDT 和未知标签

    目前 我们正在考虑将我们的开发环境从 CodeWright 它早已被 Borland 放弃 迁移到 Eclipse 我们使用 Eclipse 进行 Perl PHP 和一些 Windows C 开发 并取得了巨大成功 然而 问题出现在我们的
  • 如何隐藏Android软键盘? [复制]

    这个问题在这里已经有答案了 我在 Linearlayout 中有两个 EditText 视图和一个按钮 在编辑文本中写入完成后 我想隐藏Android虚拟键盘 我该怎么做 您可以像这样使用 InputMethodManager 类 Inpu
  • 如何使用 Cloudflare Worker 发出异步请求(非阻塞)

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