Bootstrap工具提示函数被异步调用。如何在调用下一个函数之前等待它完成?

时间:2018-07-30 17:54:03

标签: jquery twitter-bootstrap async-await twitter-bootstrap-tooltip

在下面的函数中,我想确保首先完成tooltip("destroy"),然后执行下一行takeScreenshot()。不幸的是,Bootstrap官方文档指出tooltip("destroy")是一个异步函数,因此在下面的代码中,takeScreenshot()甚至在工具提示被销毁之前都已执行。

当前,我尝试了2种方法:

方法1:使用异步-等待:这不能解决问题。

方法2:使用setTimeout延迟执行takeScreenshot()。这解决了问题,但似乎是hack,而不是标准解决方案。

在Javascript或Jquery中是否可以解决此问题?

下面是我的代码无法同步工作:(

const processScreenshot = () => {
  $('#draggableDiv').tooltip("destroy"); // this line is asynchronous in nature
  takeScreenshot()  // this line gets executed 1st before previous line returns
}

1 个答案:

答案 0 :(得分:2)

因为您提到的是“ destroy”而不是dispose(Bootstrap 4使用dispose代替destroy),所以我认为您使用的是Bootstrap3.x。有了这个假设,您应该可以像这样监听'hidden.bs.tooltip':

$('#myTooltip').on('hidden.bs.tooltip', function () {
  // do something…
})

参考:https://getbootstrap.com/docs/3.3/javascript/#tooltips,并确认预期的行为/合并请求得到解决的地方:https://github.com/twbs/bootstrap/issues/13031

这样可以确保您至少已隐藏工具提示。我看不到任何实际被破坏的事件。