Javascript 打开承诺里面的窗户

Javascript 打开承诺里面的窗户,javascript,google-chrome,promise,q,Javascript,Google Chrome,Promise,Q,我们使用的是promise lib Q,我们遇到了以下问题。 我们尝试在promise机制启动之前打开窗口,但问题是,当打开新选项卡(并获得焦点)时,所有浏览器资源都指向新选项卡,并且逻辑仍然在第一个选项卡中完成,这会导致性能差 还有其他方法可以在承诺完成时处理此事件,然后捕获此事件并打开新窗口 更新 “所有浏览器资源都指向新选项卡”是什么意思 我们发现了有趣的行为:) 当用户单击按钮时,我们正在运行应用程序,在这种情况下,我们打开新选项卡,焦点更改为新选项卡,我们正在等待应用程序启动,这大约

我们使用的是promise lib Q,我们遇到了以下问题。

我们尝试在promise机制启动之前打开窗口,但问题是,当打开新选项卡(并获得焦点)时,所有浏览器资源都指向新选项卡,并且逻辑仍然在第一个选项卡中完成,这会导致性能差

还有其他方法可以在承诺完成时处理此事件,然后捕获此事件并打开新窗口

更新

“所有浏览器资源都指向新选项卡”是什么意思 我们发现了有趣的行为:) 当用户单击按钮时,我们正在运行应用程序,在这种情况下,我们打开新选项卡,焦点更改为新选项卡,我们正在等待应用程序启动,这大约需要15秒(直到应用程序实际运行)。 我们做了以下测试(非常有趣:)。当我们点击run application(运行应用程序)并打开新选项卡时,我们立即单击返回到第一个选项卡(有按钮),通过这样做,时间减少到4.5秒!焦点似乎改变了浏览器处理资源的方式


我正在寻找替代方案

这是因为两种政策之间存在冲突:

  • 根据规范,承诺异步执行
    .then()
    处理程序(在当前事件循环完成之后)

  • 出于可用性和安全性原因,只能从直接用户操作调用
    window.open()
    (在由用户操作启动的同一事件循环处理期间,或在随后的短时间内从某些用户操作调用)

  • 由于#2,您将无法从遵循promise规范的promise的
    .then()
    处理程序打开窗口

    通常的解决方法是在用户单击时(在承诺得到解决之前)同步打开窗口,然后在承诺得到解决时填写您已经打开的窗口的内容,或者在错误情况下关闭窗口。这并不理想,但如果在打开窗口时涉及异步操作,那么除了获得提升的权限(例如在浏览器插件中)(不是从普通网页脚本中)之外,实际上没有其他选择

    有关如何通过实施此解决方案解决特定编码问题的更详细帮助,您必须将实际代码添加到问题中,并描述遇到的具体问题


    有关特定代码的帮助问题必须包括您需要帮助的代码。

    什么是“所有浏览器资源都指向新选项卡”的意思?@jfriend00-太长了:)请查看我的更新,您认为如何以及如何克服它?如果不查看相关代码,我们无法帮助您解决代码问题。你想让我们猜猜密码是什么吗?有一种猜测是,后台窗口中的Javascript计时器会变慢,而前台窗口计时器会全速运行。但是,因为我不知道你的代码是做什么的,我甚至不知道这是否相关。根据堆栈溢出准则:寻求调试帮助的问题(“为什么这个代码不工作?”)必须包括所需的行为、特定的问题或错误,以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建。@jfriend00-我不需要代码帮助,因为这已经完成,并且可以作为提供的链接使用,并且您建议在单击按钮时打开窗口,但问题是我们的性能有问题,我的问题是,按建议打开窗口是唯一的方法,或者还有其他方法我们可以考虑……我想你应该把你的答案移到我们会把它关闭dupe@Bergi-这与答案中提供的建议不同?我已经提供了这个链接,但我想知道是否有其他选择…@JhonD:我认为这与昆汀提供的解释完全相同,与丹尼斯建议的解决方案完全相同。如果你在寻找更多的替代方案,你应该a)明确要求,b)可能会对原来的问题给予奖励。