javascript - 使用jQuery promise模拟同步调用

标签 javascript jquery promise

我一直在使用 bootbox.js库,异步操作,但我需要以同步方式使用它(例如,在提交表单之前设置一个“确认”窗口)。

我不想使用 e.preventDefault() 取消事件,我想推迟操作直到用户响应模态。目前该库不支持它,但我很好奇是否可以使用 promises 模拟同步行为?

这是一个非常基本的示例,使用链接(而不是表单提交按钮,这是我的最终目标): http://plnkr.co/edit/5NovsuKTeQ7y6SKNTwWp?p=preview

最佳答案

不,这根本不是 promise 的作用。 Promises 在这里无法为您提供帮助。

链接的默认操作是导航到另一个页面(或转到此页面中的某个部分)。如果您想阻止链接执行其操作 - 您必须使用 e.preventDefault() 或从 onclick 处理程序返回 false (最好是前者)。

preventDefault 正是您所需要的,听起来也正是您的目标。

但是 confirm 有效吗?!

是的,确实如此,没有人真正知道为什么 - 阻塞是 confirm promptalert 的原始行为,并且从未更改过为了向后兼容。它完全阻塞并且在启动时什么也没有发生——这与语言和其他 API 不同,并且非常不典型。 - 例如:

setTimeout(function(){ 
    alert("World");
},100);
alert("Hello");

在这里,即使只有 100 毫秒的超时,在您关闭“Hello”框之前,“World” 不会被提醒。 alertprompt 只是“卡住”JavaScript 的执行。它们被认为是糟糕的用户体验,通常是一个糟糕的选择,除了非常具体的问题。

那么什么是 promise ?

Promises 是对延迟计算的抽象,它们允许您创建看起来像同步的异步代码,这很棒,但它们并不神奇,它们不会将代码变成实际上 同步。所有 promises 所做的就是使编写异步代码几乎像编写同步代码一样容易

关于javascript - 使用jQuery promise模拟同步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22766771/

相关文章:

javascript - Q :then callback? 中的静默异常

javascript - _lpchecked ="1"在表单中的作用是什么?

javascript - 当高度变大时 Viewwidth 变大

javascript - 找不到 CSS 标签

javascript - 从具有异步调用的 for 循环返回

javascript parse Promise - 更新记录

javascript - 如何正确处理 typescript 中的 promisifyAll?

jquery - 移至下一个菜单项时删除类

javascript - 导航栏固定底部位置并在到达滚动位置时切换到静态

javascript - jQuery 鼠标悬停问题