本周的RxJs操作符非常常用表单验证:debounceTime
.
debounceTime
将在给定的时间内(以毫秒为单位)延迟发出的值,并在该时间过去后发出最新的值,而没有另一个源发出。我知道用语言来描述并不容易。
一个大理石图为debounceTime
看起来是这样的:

在上面的例子中,值2 - 3 - 4 - 5之间的间隔不到10毫秒,所以它们被丢弃了。10毫秒后只发射了5个。
为什么这对表单验证有用?因为我们通常希望在触发异步验证之前等待用户完成输入。例如,如果我们验证一个街道名称,等待用户停止输入一段时间是有意义的,而不是在每次发生新的击键时向API发送HTTP请求,这会让服务器充满无用的验证请求。
使用我们昨天的信用卡演示,这里有一个不同的Stackblitz例子我让输出反弹400毫秒。结果如下:

您可以看到,当我停止输入400毫秒时,就会显示debpublished值。这就是我使用运算符的方式:

然后将结果并排显示在我的HTML模板如下:

通常,300到400毫秒是剔除用户输入的最佳时间点,但你可以尝试不同的值,看看哪个效果最好。
如果你想深入了解异步表单验证,本教程应该会有帮助:如何用Angular编写异步表单验证器?