diff options
| author | Daniel Friesel <derf@finalrewind.org> | 2020-09-20 10:52:21 +0200 | 
|---|---|---|
| committer | Daniel Friesel <derf@finalrewind.org> | 2020-09-20 10:52:21 +0200 | 
| commit | 878df847bac8cffb5452af30c3270fbdd6050651 (patch) | |
| tree | a8a35d8621a83f676179555dac6aa257b6673d7c | |
| parent | 93256284a230bda3c8f04e4a9d3ae689a5fe7ff1 (diff) | |
defer route detail rendering until all requests have completed
| -rw-r--r-- | lib/DBInfoscreen/Controller/Stationboard.pm | 26 | 
1 files changed, 22 insertions, 4 deletions
| diff --git a/lib/DBInfoscreen/Controller/Stationboard.pm b/lib/DBInfoscreen/Controller/Stationboard.pm index 220e630..9706b39 100644 --- a/lib/DBInfoscreen/Controller/Stationboard.pm +++ b/lib/DBInfoscreen/Controller/Stationboard.pm @@ -442,8 +442,10 @@ sub render_train {  	$self->render_later; -	# if wagonorder->is_available_p takes longer than get_route_timestamps_p, -	# we'll have a useless (non-working) wagonorder link. That's okay. +	my $wagonorder_req  = Mojo::Promise->new; +	my $stationinfo_req = Mojo::Promise->new; +	my $route_req       = Mojo::Promise->new; +  	if ( $departure->{wr_link} ) {  		$self->wagonorder->is_available_p( $result, $departure->{wr_link} )  		  ->then( @@ -455,11 +457,14 @@ sub render_train {  				$departure->{wr_link} = undef;  				return;  			} +		)->finally( +			sub { +				$wagonorder_req->resolve; +				return; +			}  		)->wait;  	} -	# Same for stationinfo (direction of travel). If it's too late and -	# therefore missing, that's okay.  	$self->wagonorder->get_stationinfo_p( $result->station_uic )->then(  		sub {  			my ($station_info)    = @_; @@ -505,6 +510,11 @@ sub render_train {  			# errors don't matter here  			return;  		} +	)->finally( +		sub { +			$stationinfo_req->resolve; +			return; +		}  	)->wait;  	$self->hafas->get_route_timestamps_p( train => $result )->then( @@ -604,6 +614,14 @@ sub render_train {  		}  	)->finally(  		sub { +			$route_req->resolve; +			return; +		} +	)->wait; + +	# Defer rendering until all requests have completed +	Mojo::Promise->all( $wagonorder_req, $stationinfo_req, $route_req )->then( +		sub {  			$self->render(  				'_train_details',  				departure => $departure, | 
