U A*_*los 5 frp rxjs bacon.js kefir.js
我从按钮单击事件创建了一个流。该按钮对应于对数据库的创建操作。显然,我希望数据库操作仅触发一次(至少直到触发完成)。有没有办法忽略事件createButtonStream直到Api.create返回?也就是说,第一个事件应调用#Api.create,随后的事件应被忽略,直到#Api.create返回。
createButtonStream
.flatMap(() => Api.create()) //Needs to fire once until doSomething() is called
.onValue(result => doSomething(result))
Run Code Online (Sandbox Code Playgroud)
我想到的唯一方法是使用全局状态...而我宁愿不这样做。
//i don't wanna do this
let condition = true
createButtonStream
.filter(() => condition)
.map(() => condition = false)
.flatMap(() => Api.create())
.onValue(result => {condition = true; doSomething(result)})
Run Code Online (Sandbox Code Playgroud)
您可以使用等待。你需要一辆巴士来解决先有鸡还是先有蛋的问题。
const filterBus = new Bacon.Bus()
const createDone = createButtonStream
.filter(filterBus.toProperty(true))
.flatMap(() => Api.create())
const inProgress = createButtonStream.awaiting(createDone)
filterBus.plug(inProgress.not())
createDone.onValue(doSomething)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
500 次 |
| 最近记录: |