强制同步客户端功能异步执行或在一段时间后终止同步功能

时间:2019-06-17 03:24:01

标签: javascript angularjs promise

我正在客户端运行一个库函数,该函数本质上是同步的,这就是为什么一旦执行它就会阻塞整个UI线程。我尝试将所有内容都包装在promise中,但是它仍然不能解决我假定的问题,因为通常在promise中的异步函数是在其他地方执行的(即服务器端或第三方API),但是此功能正在我的浏览器中执行。

我想要的是在该libfunc执行后才阻止浏览器,或者在某个时间后杀死libFunc。

function foo(){
    return new Promise((resolve,reject)=>{
       try{
         library.libFunc();
         resolve();     
       }catch(e){
         reject(e);
       });

}

function someFunc(){
    foo()
    .then(function(result){
       console.log('hey');
    })
    .catch(function(e)){
     console.error(e);
    });
    $timeout(function(){
         console.log('hey'
    },5000);
}

在libFunc()完成之前,它永远不会打印嘿。

1 个答案:

答案 0 :(得分:0)

考虑使用Web Workers

从文档中:

  

Web Workers是Web内容在后台线程中运行脚本的一种简单方法。工作线程可以执行任务,而不会干扰用户界面。此外,他们可以使用XMLHttpRequest执行I / O(尽管responseXMLchannel属性始终为空)。创建后,工作人员可以通过将消息发布到该代码指定的事件处理程序中来向创建该代码的JavaScript代码发送消息(反之亦然)。

     

如果您需要立即从主线程中终止正在运行的工作程序,则可以通过调用工作程序的terminate方法来完成。

有关更多信息,请参见