In Supply§
请参阅方法 tap的上下文中的主要文档 in context
method tap(Supply: = -> $ ,: = -> ,: = -> ,: = -> $ )
创建一个新 tap(某种订阅),除了所有现有的 tap。第一个位置参数是一段代码,当通过 emit 调用获得新值时将调用该代码。
&done 回调可以在多种情况下调用:如果正在 tap 一个供应块,则在到达 done 例程时;如果正在 tap 一个供应块,则当供应块到达末尾时,它将自动触发;如果对父级 Supplier 调用 done 方法(在供应块的情况下,如果有多个由 whenever 引用的 Supplier,则必须对它们全部调用 done 方法才能触发 tap 的 &done 回调,因为块将到达其末尾)。
如果 tap 位于以错误退出的供应块上,则调用 &quit 回调。如果对父级 Supplier 调用 quit 方法,也会调用它(在供应块的情况下,任何一个 Supplier 以未捕获的异常退出都会调用 &quit 回调,因为块将以错误退出)。错误作为参数传递给回调。
一旦创建 Tap 对象,就会调用 &tap 回调,该对象作为参数传递给回调。该回调在 emit/done/quit 之前调用,提供了一种获取 Tap 对象的可靠方法。此方法有用的一个情况是当 Supply 开始同步发出值时,因为对 .tap 的调用在发出完毕之前不会返回 Tap 对象,防止在需要时停止它。
方法 tap 返回类型为 Tap 的对象,您可以在该对象上调用 close 方法来取消订阅。
my = Supply.from-list(0 .. 5);my = .tap(-> , done => );
生成
0 1 2 3 4 5 no more ticks