使用异步承诺处理 Guzzle 超时

2024-01-04

我正在发送多个异步承诺,并将 guzzle 超时设置为 30,我想知道如何捕获是否有任何承诺超时,以便我可以报告此错误。 请参阅下面的代码。本质上,我想在超时之前使用我能做的任何响应,并捕获那些超时的响应。

foreach ($apiRequests as $guzzleParameters) {
    $request = new Request($guzzleParameters->getType(), $guzzleParameters->getApiEndpoint(), $guzzleParameters->getHeaders(), $guzzleParameters->getBody());
    $promises[$guzzleParameters->createKey()] = $this->client->sendAsync($request)->then(
                function (ResponseInterface $res) {
                    return $res;
                },
                function (RequestException $e) {
                    switch ($e->getCode()) {
                        case 400:
                        // log error 
                            break;
                        case 401:
                        // log error 
                            break;
                        case 403:
                        // log error 
                            break;
                        case 404:
                        // log error 
                            break;
                    }
                    return $e->getResponse();
                }
            );
        }
$responses = Promise\Utils::settle($promises)->wait(true);

据我了解,您希望以异步方式记录每个请求的时间,然后您可以将其相加,并在总和达到超过 30 时放置一个标志。

注意:未测试代码,但 on_stats 部分代码已测试

foreach ($apiRequests as $key => $guzzleParameters) {
    $LogStats = [];
    $request = new Request($guzzleParameters->getType(), $guzzleParameters->getApiEndpoint(), $guzzleParameters->getHeaders(), $guzzleParameters->getBody());
    $promises[$guzzleParameters->createKey()] = $this->client->sendAsync($request, [
                    'on_stats' => function (\GuzzleHttp\TransferStats $stats) {
                        // $LogStats["uri"] = $stats->getEffectiveUri();
                        $LogStats[$key]["time"] = $stats->getTransferTime();
                        // $LogStats["stats"] = json_encode($stats->getHandlerStats());
                        // Log::debug("\n--------------------------------\nDebug Solr Request Stats :: ", $LogStats);
                    }
                ])->then(
                function (ResponseInterface $res) {
                    return $res;
                },
                function (RequestException $e) {
                     // ....
                    }
                    return $e->getResponse();
                }
            );
        }
$responses = Promise\Utils::settle($promises)->wait(true);

这里我用过on_stats https://docs.guzzlephp.org/en/latest/request-options.html#on-stats,您可以对所有时间进行计数,然后将其求和,一旦达到 30,则将标志设置为 true。那么你就可以知道在哪个键之后请求失败了。

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

使用异步承诺处理 Guzzle 超时 的相关文章

随机推荐

  • 企业架构师:状态中进入/退出功能的顺序

    在我的状态机中 我有一个具有多个进入和退出函数的状态 Enterprise Architect 按字母顺序对它们进行排序 这可能会导致如下结果 entry a exit b entry c 进入和退出函数就是 EA 所说的 元素操作 问题
  • 用于 BERT 微调的优化器和调度器

    我正在尝试使用 BERT 微调模型 使用transformers库 我对优化器和调度程序有点不确定 首先 我明白我应该使用transformers AdamW而不是 Pytorch 的版本 另外 我们应该按照论文中的建议使用预热调度程序 因
  • 包含函数指针的类可以用作非类型模板参数吗?

    考虑下面的类S包含一个函数指针和一个constexpr object s使用 lambda 初始化该类 struct S void f constexpr S s 现在如果我写一个模板X具有 type 的非类型模板参数S 并实例化它s像这样
  • 流缓冲区 - Google BigQuery

    我正在开发一个 python 程序来使用 Google Dataflow 模板 我正在做的是将数据从 PubSub 写入 BigQuery pipeline options view as StandardOptions streaming
  • C++ 代码中的 const 和weak 属性

    我无法理解下面的编译错误 第一个文件是标题 test weak h ifndef TEST WEAK H define TEST WEAK H ifndef ASSEMBLER const char const TUTU attribute
  • 如何按日期对对象数组进行排序?

    我正在尝试对对象数组进行排序 每个对象包含 var recent id 123 age 12 start 10 17 13 13 07 id 13 age 62 start 07 30 13 16 30 日期格式为 mm dd yy hh
  • 使用 JavaScript 禁用引导选择选项

    我尝试使用 javascript 禁用我的特定引导选择选项 我知道如何禁用 正常选择选项 但是当使用引导选择时它不起作用 它被禁用 变灰 但我仍然可以选择它 这里jsfidle https jsfiddle net ybf5hpam 1
  • 使用 ImpersonateLoggedOnUser 移动文件

    我正在尝试移动文件 但出现此错误 System UnauthorizedAccessException 对路径的访问被拒绝 在 System IO Error WinIOError Int32 errorCode String MaybeF
  • 如何使用spring security(spring boot)实现Ldap身份验证

    我有以下代码 我正在尝试实现 ldap 身份验证 但我认为它没有发生 我的安全配置 EnableWebSecurity Configuration Order SecurityProperties ACCESS OVERRIDE ORDER
  • 如何使用 C# 的 ANTLR 获取 Lexer 和 Parser?

    似乎 ANTLR 支持 C 语言 但我不知道如何生成相关类 我搜索并看到存在 Visual Studio 扩展 但我不支持 2015 那么如何使用 ANTLR 手动为 C 生成词法分析器和解析器 VS 扩展主要用于语法突出显示和编辑器细节
  • jQuery UI 选项卡 - IE 中的圆角选项卡角

    我正在尝试从 AjaxControlToolkit 切换到 jQuery UI 选项卡以获得相当简单的选项卡元素 我 99 都掌握了 CSS 和主题 但我在尝试在 IE 中的选项卡上实现圆角时遇到了困难 jQuery UI 提供了更好的浏览
  • reinterpret_cast 类型双关实际上是未定义的行为吗?

    这种类型的双关语似乎被广泛持有reinterpret cast以某种方式被禁止 正确地说 未定义的行为 即 本国际标准没有提出要求的行为 https timsong cpp github io cppwp n4659 defns undef
  • TFS 传输层安全 1.1/1.2

    我们目前在 Windows Server 2012 R2 上使用 TFS 2015 3 使用 NARTAC 指定使用 TLS1 1 1 2 并禁用 TLS1 0 后 我们的构建层服务器无法连接到应用层服务器 有没有人有同样的问题并解决了 谢
  • 语义相关性算法 - python [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想找到两个同义词集之间的相关性 我遇到了许多算法 如 resnik lin wu palmer path 算法 leacock ch
  • 从 iPhone 上传文件时出现 POSIX 错误 12(“无法分配内存”)

    我正在开发一个 iPhone 应用程序 该应用程序涉及将相机中的完整照片 通常每张照片在 1 5 到 2 0 MB 之间 及其缩略图 小得多 上传到 Amazon S3 缩略图总是成功上传 但是有时完整图像则不然 当它们失败时 它们会失败并
  • Botframework - 调整机器人聊天的宽度[重复]

    这个问题在这里已经有答案了 Is it possible to resize the width of the chat for botframework Currently I m testing on a emulator Basica
  • 使用 Node JS 将数据从 Excel 导入到 MySql

    我想使用 NodeJS 读取 excel 并保存在 MySQL 数据库中 我不知道该使用什么库 我希望能够根据某些行和列读取 Excel 请帮我 您可以使用许多库 sheetjs xlsx excel js etc
  • iOS 的滑块视图

    Can someone help me with this scenario 有一个按钮 点击该按钮时 会滑动打开一个 UIView 点击的按钮仍在其左侧 再次点击此按钮时 使 UIView 向后滑动 你所描述的很简单 我们将从右侧滑入的视
  • RGB 图像的像素强度以及如何将其与整数相乘以查看灰度阴影

    我有一个 RGB 图像 有 4 种不同的颜色黑色 0 0 0 作为背景 绿色 106 136 93 蓝色 64 224 208 和棕色 168 124 85 当我将图像读取为灰度并使用 np unique 时 它会返回一个巨大的像素强度列表
  • 使用异步承诺处理 Guzzle 超时

    我正在发送多个异步承诺 并将 guzzle 超时设置为 30 我想知道如何捕获是否有任何承诺超时 以便我可以报告此错误 请参阅下面的代码 本质上 我想在超时之前使用我能做的任何响应 并捕获那些超时的响应 foreach apiRequest