- 论坛徽章:
- 0
|
- #!/usr/bin/perl
- use strict;
- use warnings;
- use Data::Dumper;
- use Mojo::IOLoop::Delay;
- my $delay = Mojo::IOLoop::Delay->new;
- $delay->on(finish => sub {
- my($delay, $arg) = @_;
- print "finish: $arg\n";
- });
- my @steps;
- for my $id (1..5) {
- push @steps, sub {
- # get result from last sub
- my ($delay, $arg) = @_;
- print "id: $id\n";
- if ($arg and $arg > 2) {
- return;
- } else {
- my $end = $delay->begin;
- Mojo::IOLoop->timer(1 => sub {
- $end->(undef, $id)
- });
- }
- };
- }
- $delay->steps(@steps)->wait;
复制代码 输出结果如下:- $ perl test.pl
- id: 1
- id: 2
- id: 3
- id: 4
- finish: 3
复制代码 写个简单的测试,我想要的如下:
1. 顺序执行5个操作,每步操作把结果(id),传给下一个sub
2. 每步step判断上一步的结果,如果结果大于2时就跳过后面的sub,
3. finish捕获最后返回的结果
问题:
1. 为什么finish获取到的是3 而不是2 ?
2. 为什么上面的调试print会print到4 ?而不是3就结束? |
|