我在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)
后调用吗?
答案 0 :(得分:0)
如果你正在使用jquery' $.ajax
,它已经返回了一个Promise,您可以使用它的then
方法。
尽管如此,Promise不是用于排序,而是用于异步计算,AJAX是异步的巧合(注意" A")因此它是合乎逻辑的$.ajax
返回承诺。
它们可以被链接,以便当第一个成功时,它的结果会传递给第二个,依此类推,但这不是它们的主要用途。
它们的主要用途是异步计算,并且存在then
方法,因为有时您需要使用第一个的结果执行另一个异步操作。
当你需要订购同步计算时,不应该使用承诺,尽管它是一个完美的想法。