Documentation for method migrate
Documentation for method migrate, assembled from the following types:
method migrate(Supply: --> Supply)
Supply which itself has values that are of type
Supply as input. Each time the outer
Supply emits a new
Supply, this will be tapped and its values emitted. Any previously tapped
Supply will be closed. This is useful for migrating between different data sources, and only paying attention to the latest one.
For example, imagine an application where the user can switch between different stocks. When they switch to a new one, a connection is established to a web socket to get the latest values, and any previous connection should be closed. Each stream of values coming over the web socket would be represented as a Supply, which themselves are emitted into a Supply of latest data sources to watch. The
migrate method could be used to flatten this supply of supplies into a single Supply of the current values that the user cares about.
Here is a simple simulation of such a program:
my Supplier .= new;sub watch-stock().Supply.migrate.tap: *.say;watch-stock('GOOG');sleep 3;watch-stock('AAPL');sleep 3;.Supply.migrate.tap: *.say;watch-stock('GOOG');sleep 3;watch-stock('AAPL');sleep 3;
Which produces output like:
Starting to watch GOOGGOOG: 111.67GOOG: 111.20GOOG: 111.37Lost interest in GOOGStarting to watch AAPLAAPL: 111.55AAPL: 111.6AAPL: 111.6