写了一个蒙版插件,现在遇到了一个问题,如何实现类似alert弹窗时阻断后面函数的执行。
比如,插件实例化了一个confirm:
LDialog.confirm("", {}, function() {
//dosomething...
});//实例化插件,生成了一个类似confirm的确认框,回调函数是确认按钮事件
window.location.reload();//执行刷新页面方法函数
我该如何在插件中进行阻断,当点击确定按钮后再执行刷新页面的方法。
请勿提出类似给window.location.reload();
加倒计时的解决方法,思考如何在插件中进行阻断,谢谢各位大神。
http://luojinghui.github.io/LDialog/html/index.html
这是我的demo地址,还有,如果给类似tips方法后面写刷新页面方法,可能tips还在执行过程中就刷新页面了。
据我所知,目前还只有 alert 可以阻断。这种情况下,我觉得你应该考虑的是异步(Callback或Promise)方式,而不是阻断方式,比如
你想要的(仅算法)
如果使用回调的方式可以这样设计
注意
onOkButton
和onCancelButton
两个回调就是指你弹框出来的按钮事件。一般情况下应该考虑把弹框封装成函数,所以假设你已经封装成了showConfirm()
。如果采用 jQuery 的 Deferred 来实现大概可以这样设计
如果使用 ES2015(ES6) 的 Promise 可以这样设计
实现的方式大同小异,如果使用 async/await 的方式,可以像写同步代码一样写异步代码,这在 C# 里已经实现,但是在 javascript 中要在 ES7 才能实现,ES7 还在制定中,尚不可用于生产模式。