perl - 如何取消来自 Mojo::UserAgent 的正在进行的请求?
问题描述
假设我想取消一个飞行中的请求Mojo::UserAgent
?我怎样才能做到这一点?
解决方案
演示如何取消承诺
在这个例子中,我们创建了一个随机的 Timer 承诺和一个 HTTP Get 承诺。第一个获胜的会拒绝另一个承诺。
use Mojo::UserAgent;
use v5.30;
use experimental 'signatures';
my $ua = Mojo::UserAgent->new;
my $p1 = Mojo::Promise->timer(rand('0.4') , 'Timeout');
my $p2 = $ua->get_p('https://www.cpanel.net/is_hiring_message_evan_carroll_on_linkedin');
$p1
->then(sub ($res) {$p2->reject("\t> reject \$p2"); say $res})
->catch(sub ($msg) {say $msg});
$p2
->then(sub ($res) {$p1->reject("\t> reject \$p1"); say $res})
->catch(sub ($msg) {say $msg});
Mojo::Promise->new->all( $p1, $p2 )->catch(sub{})->wait;
请注意,如果超时获胜,您可能会收到一个错误事件,Premature connection close
这正是您所期望的。你可以在这里看到'我们正在使用Mojo::Promise
'all
,
返回一个新
Mojo::Promise
对象,该对象要么在所有传递的Mojo::Promise
对象都已实现时实现,要么在其中一个对象拒绝时立即拒绝。如果返回的 Promise 实现了,它会以与传递的 Promise 相同的顺序使用已实现的 Promise 中的值来实现。
注意,在这种情况下race
可能更适用。我们不必手动拒绝另一个承诺,但我想在摘要中reject
手动演示拒绝。
推荐阅读
- visual-studio-code - Visual Studio Code 调试器不会在除 index.php 之外的任何其他文件中的断点处停止
- arrays - 将数组与整数文本文件合并并写入同一文件
- java - 具有相同类型擦除解决方法的方法,无需重命名方法名称
- react-native - 将带有变量的对象和单独的变量传递给反应本机组件有什么区别?
- python - 我怎么能模仿 Kafka 消费者错过在 Python 中消费一条消息
- node.js - 在 Android 和 Nodejs 之间运行 Socket.io(在 NGINX 后面使用 https)
- c# - 如何在 CRUD Web 应用程序中使用 C#/Razor 动态分配 CSS 类服务器端?
- python - Python:尝试从 Pandas 的 DataFrame 中创建一个矩阵
- c - LLVM-IR 获取结构元素指针
- php - PHP 回显一个多维数组