【问题标题】:Make a Q promise function call blocking in AngularJS在 AngularJS 中做一个 Q Promise 函数调用阻塞
【发布时间】:2015-09-24 16:30:36
【问题描述】:

在 Angular 服务中,我们公开了一个提供令牌的函数,并且应该阻塞,直到加载令牌。

服务中的关键部分

....
    function getToken(){
        tokenPromise().then(
            function(token){ return token;},
            function(error){ return null;}
    }
....

如何将其转为阻塞函数代码?

这样service.getToken(); 是阻塞/同步的,直到令牌存在。

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

【问题讨论】:

标签: javascript angularjs synchronization promise q


【解决方案1】:

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

您可以做的是在getToken 中返回承诺并使用then 的承诺继续它:

getToken().then(function(token) {
    // Do stuff when I get the token
});

关于OP的最后更新...

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

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

【讨论】:

  • 那么在这种情况下,如何让它同步呢?因为返回一个承诺并不能解决问题。
  • @MemLeak 如果您正在执行 AJAX 请求,则没有机会使其同步。 AJAX 是“异步 JavaScript 和 XML”,检查 asynchronous 部分 :(
  • @MemLeak 返回承诺,解决问题。为什么不?关键是你需要利用异步编程,否则你就死定了! :D
  • @MemLeak 这是我的建议...不要误会我的意思。今天的 UI 和异步性是必须具备的。您希望非 UI 任务不会冻结 UI,不是吗?
  • 因为它将问题转移到下一层。不反对异步编程。我们在等待令牌时遇到的这个问题出人意料地出现了;)
猜你喜欢
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
  • 2021-02-13
相关资源
最近更新 更多