确保在Angular中按顺序发生异步调用

时间:2016-06-15 22:21:10

标签: javascript angularjs

我在Rails的Angular和后端做了一个前端。 在Angular方面,我发送了许多http请求,有时这些请求需要发生才能确保应用程序正常工作。

根据我的研究,人们出于这个原因使用承诺。这是真的?承诺是否确保在完成上一个操作并且响应回来之后才会发生?

让我们来看看我的例子。

我有一个返回应用程序对象的promise。如果localStorage中不存在,我的应用程序将从远程服务器获取。

    ApplicationModule.get = function () {

            if (!localStorage.application) {
                return Restangular.all('session').one('user').get().then(function (response) {
                    application = {
                            "id": response.current_application_id,
                            "user_id": response.id,
                            "_type": response.current_type
                        }
                    localStorage.setItem("application", JSON.stringify(application));
                    return application
                });
            } else {
                return $q.resolve(JSON.parse(localStorage.application));
            }
    }

    return ApplicationModule;
}]);

在我的其他控制器中,我按照以下方式使用功能。我基本上需要从ApplicationModule.get()获得响应并将其用作下一个函数somefunction中的参数。

        ApplicationModule.get().then(function (response) {
           somefunction(response);
        })

我很好奇的是,如果我使用promise,somefunction()总是在ApplicationModule.get()中完成return Restangular.all('session').one('user').get().then(function (response)后调用吗?

1 个答案:

答案 0 :(得分:0)

如果你正在使用jquery' $.ajax,它已经返回了一个Promise,您可以使用它的then方法。

尽管如此,Promise不是用于排序,而是用于异步计算,AJAX是异步的巧合(注意" A")因此它是合乎逻辑的$.ajax返回承诺。

它们可以被链接,以便当第一个成功时,它的结果会传递给第二个,依此类推,但这不是它们的主要用途。

它们的主要用途是异步计算,并且存在then方法,因为有时您需要使用第一个的结果执行另一个异步操作。

当你需要订购同步计算时,不应该使用承诺,尽管它是一个完美的想法。