首页 > 解决方案 > 在perl中实现js setTimeout功能

问题描述

如何在 Perl 中实现 Javascript setTimeout 功能?这是我试图用 Perl 编写的一段 javascript 代码。这可以使用线程吗?

alert("Event 1 occured");
setTimeout(function(){ alert("3 seconds elapsed"); }, 3000);
alert("Event 2 occured");

输出是:

 Event 1 occured
 Event 2 occured
 3 seconds elapsed

我有 perl 5.18.2,我在 Mac OSX 上

标签: multithreadingperlsettimeout

解决方案


不需要线程,而且在 Perl 中它们也不是很好。您可以像 JavaScript 一样使用事件循环,只是在 Perl 核心中没有。两个流行且得到良好支持的事件循环生态系统是IO::AsyncMojo::IOLoop(Mojolicious Web 框架背后的事件循环)。主要区别在于,与 JavaScript 不同,事件循环在启动之前不会运行。

use strict;
use warnings;
use IO::Async::Loop;
print "Event 1 occurred\n";
my $future = IO::Async::Loop->new->delay_future(after => 3)->on_done(sub { print "3 seconds elapsed\n" });
print "Event 2 occurred\n";
$future->await; # run event loop until Future has been resolved

use strict;
use warnings;
use Mojo::IOLoop;
print "Event 1 occurred\n";
Mojo::IOLoop->timer(3 => sub { print "3 seconds elapsed\n" });
print "Event 2 occurred\n";
Mojo::IOLoop->start; # run event loop until no more events to wait for

查看Mojolicious 食谱,了解事件循环和非阻塞代码的高级概述。


推荐阅读