【发布时间】:2018-04-08 10:57:41
【问题描述】:
假设我们有一个简单的前端和(如果重要的话我们假设 Angular)和一个后端应用程序。假设前端应用程序执行get 请求。通常,角度存储库发出$http.get 请求,该请求返回一个承诺(角度 1)或可以转换为承诺(角度 2 或 4)的可观察对象,然后存储库返回该承诺。然后角度服务看起来像
repository.makeTheGetCall().then(function (response) {
// process response
});
这通常很好。
1) 但是如果服务上的所有逻辑都依赖于这个 1 调用呢?然后我们基本上将整个服务嵌套在一个 .then 子句中。
2) 或者如果基于第一个 Get 请求的响应,我们发出另一个请求。基于该响应,我们提出另一个请求,依此类推。然后我们将有一堆 then 子句链接起来。
这两种情况似乎都不罕见,而且都导致了看起来“丑陋”的代码。是否有任何其他做法可以用来允许异步调用但不必将承诺从存储库层返回到服务层?
谢谢你:)
【问题讨论】:
-
您不必将所有代码都放在一个函数中。您可以创建从
.then回调函数内部调用的其他函数。 #2对我来说听起来不是问题。 Promise 被设计成链式的。 (这是丑陋的替代方案:嵌套回调) -
"然后我们基本上将整个服务嵌套在 .then 子句中。" - 是的,因为从逻辑上讲,这就是您想要的:服务仅在要求。当然,您不必在语法上将整个代码嵌套在那里。
-
"然后我们将有一堆链接的 then 子句。" - 是的,这就是 whole point of promises(和 observables):它们是一元的,所以你可以链它们而不是嵌套它们。
-
如果您不喜欢
then调用的“丑陋”,请查看async/await语法。
标签: javascript angularjs asynchronous promise repository-pattern