txt: ## tap.md
  tap
  
  Combined from primary sources listed below.
  
  # [In Supply](#___top "go to top of document")[§](#(Supply)_method_tap "direct link")
  
  See primary documentation
  [in context](/type/Supply#method_tap)
  for **method tap**.
  
  ```raku
  method tap(Supply:D: &emit = -> $ { },
          :&done = -> {},
          :&quit = -> $ex { $ex.throw },
          :&tap = -> $ {} )
  
  ```
  
  Creates a new tap (a kind of subscription if you will), in addition to all existing taps. The first positional argument is a piece of code that will be called when a new value becomes available through the `emit` call.
  
  The `&done` callback can be called in a number of cases: if a supply block is being tapped, when a `done` routine is reached; if a supply block is being tapped, it will be automatically triggered if the supply block reaches the end; if the `done` method is called on the parent [`Supplier`](/type/Supplier) (in the case of a supply block, if there are multiple Suppliers referenced by `whenever`, they must all have their `done` method invoked for this to trigger the `&done` callback of the tap as the block will then reach its end).
  
  The `&quit` callback is called if the tap is on a supply block which exits with an error. It is also called if the `quit` method is invoked on the parent [`Supplier`](/type/Supplier) (in the case of a supply block any one [`Supplier`](/type/Supplier) quitting with an uncaught exception will call the `&quit` callback as the block will exit with an error). The error is passed as a parameter to the callback.
  
  The `&tap` callback is called once the [`Tap`](/type/Tap) object is created, which is passed as a parameter to the callback. The callback is called ahead of `emit`/`done`/`quit`, providing a reliable way to get the [`Tap`](/type/Tap) object. One case where this is useful is when the `Supply` begins emitting values synchronously, since the call to `.tap` won't return the [`Tap`](/type/Tap) object until it is done emitting, preventing it from being stopped if needed.
  
  Method `tap` returns an object of type [`Tap`](/type/Tap), on which you can call the `close` method to cancel the subscription.
  
  ```raku
  my $s = Supply.from-list(0 .. 5);
  my $t = $s.tap(-> $v { say $v }, done => { say "no more ticks" });
  ```
  
  Produces:
  
  ｢text｣ without highlighting
  
  ```
  
  
  ```
  
  0
  1
  2
  3
  4
  5
  no more ticks
  
  
  ```
  
  
  ```
  