0

我的问题是如何才能执行3个功能(在服务声明):角功能同步化

function1(); 
    function2(); 
    function3(); 

所有功能都包含HTTP命令(例如put或get)。这就是为什么如果我使用上面的代码函数3将在函数2之前执行。我尝试链接功能,但也没有帮助。

回答

2

您需要返回承诺,然后使用承诺链接,因为您的函数是异步的。

function1().then(function(response) { 
    /* executes function2, if function1 return success */ 
    function2().then(function(response) { 
     /* executes function3, if function2 return success */ 
     function3(); 
    } 
} 

在角度文档(https://docs.angularjs.org/api/ng/service/$q)中,您可以看到如何返回承诺。对于您使用$ http或$ resource provider的情况:他们总是返回一个您可以用于您的目的的承诺。

+0

是的,谢谢,有没有其他的方式来做到这一点,然后使用/承诺? – playerone

+1

$ http是硬编码的异步。您需要编写自己的提供程序以进行同步调用。然而,这是一个非常糟糕的主意,因为你的UI被阻止。 – trollr