Trong ứng dụng Mojolicious, tôi đang cố chuyển đổi tệp ODT thành HTML khi liên kết được nhấp. Tôi chuyển đổi các tập tin bằng cách sử dụng "soffice", một lệnh shell. Chuyển đổi các tập tin mất một thời gian. Tôi gửi thông báo trạng thái cho người dùng để thông báo cho anh ta về tiến trình. Tôi gửi các thông báo cập nhật trạng thái đó bằng cách ghi vào đối tượng Mojo :: Log. Sau đó, tôi đăng ký đối tượng đăng nhập này trong một tuyến đường EventSource.Sử dụng AnyEvent run_cmd trong Mojolicious, tôi tiếp tục nhận được lỗi này: "AnyEvent :: CondVar: chờ đợi đệ quy đang chờ"
Sau đó, tôi lặp qua các tệp và sử dụng AnyEvent :: Util run_cmd để thực thi chương trình "soffice" bên ngoài.
for my $file (@{ $filelist }) {
my $output_dir = './output_dir';
my $cmd = "soffice --headless --convert-to html --outdir '$output_dir' '$file'";
my $cv = AnyEvent->condvar;
my $w;
$w = run_cmd($cmd,
'>' => sub { my $out = shift;
&WriteToLog({ status => "cmd output '$out'..." });
undef $w;
$cv->send;
},
'2>' => sub { my $err = shift;
&WriteToLog({ status => "ERROR '$err'..." });
undef $w;
$cv->send;
}
);
$cv->recv;
}
Rất nhiều được sao chép và dán từ hướng dẫn chính của AnyEvent. Nếu chỉ có vài tệp để chuyển đổi (khoảng 2 hoặc 3), thì mọi thứ đều ổn. Các thông điệp trạng thái được gửi thông qua kết nối EventSource xuất hiện trên trình duyệt của máy khách. Sau đó, sau khi tất cả các tệp đã được chuyển đổi, trang web được hiển thị.
Nếu có nhiều tệp được xử lý, một vài tệp sẽ được chuyển đổi thì thông báo lỗi trong tiêu đề chủ đề sẽ xuất hiện.
Định tuyến cho các tuyến đường có chứa các mã trên là thế này:
my $initdocs = $r->under->to('docroute#initdocs');
$initdocs->get('/showdocs')->to('docroute#showdocs');
Đoạn mã trên là trong "initdocs" lộ trình.
Mọi trợ giúp đều được đánh giá cao. Cảm ơn trước.
chỉ là fyi, trong tương lai, thêm thẻ [tag: perl] sẽ giúp nhiều người xem câu hỏi thú vị của bạn hơn. –