业务逻辑
- 游戏场景进入后,根据具体业务场景和活动进程,可能需要弹出若干的弹框,比如邀请好友获得的奖励、离线收益、瓜分大奖等等。
- 这些弹框必须逐个弹出,不能同时弹出。
常规实现
由于弹框的逻辑是异步返回,所以免不了使用回调机制
伪代码
代码语言:javascript复制OpenDialog1(result1=>{
OpenDialog2(result2=>{
……
})
})
当然实际代码会比这个更复杂,需要更多的判断和分叉
使用Rx实现
伪代码
代码语言:javascript复制let dialogs = []
dialogs.push(rx.fromDialogBox(……))
dialogs.push(rx.fromDialogBox(……))
……
rx.concat(...dialogs).subscribe(……)
其中fromDialogBox是自己扩展的一个事件流(Observable)
这么做的好处有几个:
- 去除了回调,可读性提升
- 可以随意改变弹框的顺序
- 可以随意的根据需求变化而去除某个弹框逻辑
- 在这个事件流数组中,可以添加其他事件流,即其他异步操作穿插在弹框序列中
- 可以动态判断已经弹出的弹框数量来决定下一步操作(实时判断dialogs.length)
let dialogs = []
if (condition1)
dialogs.push(rx.fromDialogBox(……))
if (condition2)
dialogs.push(rx.fromDialogBox(……))
……
if (dialogs.length<2)
dialogs.push(rx.fromDialogBox(……))
rx.concat(...dialogs).subscribe(……)
在上述情况下,假如使用传统方式编程,可读性会很差,也更容易出现bug,你细品