Пытался обработать ошибки в задержанном ответе.
Каждый раз, когда я отправляю [200, ['Content-Type', 'application / json']
и получил ошибку, прежде чем сбрасывать другие вещи, как это
$ w-> запись ( "MyData");
$ w-> близко ();
У меня предупреждение в stdout и ошибка в stderr, но страница продолжает загружаться.
он будет загружаться до тех пор, пока я не остановлю приложение или вручную не остановлю загрузку страницы.
как мне остановить загрузку страницы в коде или как правильно обрабатывать ошибки в таких приложениях, где я использую отложенный ответ?
Perl версия 5.24
Келп версия 1.02
Бег Плак с Короной.
Мы обрабатываем сообщение об ошибке Exception :: Class.
Перехват ошибок с помощью Try :: Tiny.
Также пробовал eval и другие вещи, но это не работает.
Но изменил Try :: Tiny -> TryCatc и вернусь, если получил какую-либо ошибку, но
мне нужно написать return для каждого блока catch, это выглядит очень плохо
#!/usr/bin/perl
use strict;
use warnings;
use Kelp::Less;
get '/hello' => sub {
return sub {
my $res = shift;
my $w = $res->([200, [ 'Content-Type', 'application/json' ]]);
my $data = 10 / 0;
$w->write("MyData");
$w->close();
}
};
run;
Я ищу правильную обработку ошибок,
мне нужно попробовать {} catch {}; на каждый код, который может дать сбой?
Спасибо @ikegami за ответ, но страница все еще загружается после попыток с Object :: Destoyer и Sub :: ScopeFinalizer. Как я понимаю, $ w (писатель) не вызывает загрузку страницы. После выхода из области видимости, $ w приходит undef, и закрывать нечего, вот код.
#!/usr/bin/perl
use strict;
use warnings;
use Object::Destroyer;
use Kelp::Less;
get '/hello' => sub {
return sub {
my $res = shift;
my $w = $res->([200, [ 'Content-Type', 'application/json' ]]);
my $g = Object::Destroyer->new( sub { $w->close if $w } );
my $zzz = 1 / 0;
$w->write("DATA");
$w->close();
}
};
run;
так что я придумала это решение, как вы думаете?
#!/usr/bin/perl
use strict;
use warnings;
use Try::Tiny;
use Object::Destroyer;
use Kelp::Less;
get '/hello' => sub {
return sub {
my $res = shift;
my $w = $res->([200, [ 'Content-Type', 'application/json' ]]);
my $g = Object::Destroyer->new( sub { $w->close if $w; } );
my $ans = try {
my $zzz = 1 / 0;
}
catch {
print $_;
return;
};
return unless $ans;
$w->write("DATA");
$w->close();
}
};
run;