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