Javascript 在AngularJS中进行Q promise函数调用阻塞

Javascript 在AngularJS中进行Q promise函数调用阻塞,javascript,angularjs,synchronization,promise,q,Javascript,Angularjs,Synchronization,Promise,Q,在angular服务中,我们公开了一个函数,该函数提供了一个令牌,并且在加载令牌之前应该被阻塞 服务的关键部分 .... function getToken(){ tokenPromise().then( function(token){ return token;}, function(error){ return null;} } .... 如何将其转换为阻塞功能代码? 因此,service.getToken(

在angular服务中,我们公开了一个函数,该函数提供了一个令牌,并且在加载令牌之前应该被阻塞

服务的关键部分

....
    function getToken(){
        tokenPromise().then(
            function(token){ return token;},
            function(error){ return null;}
    }
....
如何将其转换为阻塞功能代码?

因此,
service.getToken()是阻塞/同步的,直到有令牌为止


返回承诺/回调不是解决方案。

在JavaScript中,没有阻塞函数,除非它们是同步的

您可以做的是在
getToken
中返回承诺,然后使用
中的承诺继续它:

getToken().then(function(token) {
    // Do stuff when I get the token
});
关于OP的上次更新。。。 返回承诺/回调不是解决方案


这不能由您决定。JavaScript无法阻止浏览器的UI线程,因此,您想要的方法目前是绝对不可能的。

那么在这种情况下,如何使其同步?因为返回承诺并不能解决问题。@MemLeak如果您正在执行AJAX请求,就没有机会使其同步。AJAX是“异步JavaScript和XML”,请检查异步部分:(@MemLeak回复承诺,解决了问题。为什么不呢?关键是你需要利用异步编程,否则你就死定了!:D@MemLeak这是我的建议…别误会。今天的UI和异步是必须具备的。你希望非UI任务不会冻结UI,不是吗?因为它会将问题转移到下一层。不会再有任何问题异步编程。我们在等待令牌时遇到的这个问题出乎意料地出现了;)