Ember中Route
个对象的一个细节是他们接受并处理承诺。但是,我想知道在路由的model
挂钩中返回promise的优点是什么,而不是在相应的API请求返回时填充的空记录或记录数组。似乎结果是相似的,但我认为我忽略了某些东西,即优势。
答案 0 :(得分:12)
由于我是DRY的忠实粉丝,我宁愿引用/提取路由器改版中的full article的重要段落> Alex Matchneer 不久前到了余烬Router
然后用我自己的话来解释它。
为什么?
- 应用程序启动的转换和。之间的语义差异 URL启动的转换使得它在某些情况下非常具有挑战性 处理错误或异步逻辑
- 基于身份验证的应用程序特别难以实施
当一个promise模型被解决时,有时会调用redirect
, 有时不会,取决于应用内/网址转换解决方案
解决方案是拥抱异步并首先进行路由器转换 班级公民。在新的API中,您将获得必要的挂钩 通过传递的
Transition
对象来防止/修饰转换尝试 到各种钩子。这些钩子是:每当转换时,
- 在异步验证期间,
willTransition
事件就会在当前路由上触发 即将发生。beforeModel/model/afterModel
挂钩 相。
...
model
和朋友在此路由器迭代中,transitionTo和URL更改的行为方式相同,因为如果模型具有.then属性(表示它是一个属性),则通过transitionTo提供的任何模型或从模型挂钩返回的任何模型都将暂停转换。许)。
由于添加到余烬Router
(release RC6),你会在源代码中找到类似下面的代码,恕我直言看起来很漂亮且很容易理解:
来自source:
return RSVP.resolve().then(handleAbort)
.then(beforeModel)
.then(handleAbort)
.then(model)
.then(handleAbort)
.then(afterModel)
.then(handleAbort)
.then(proceed)
.then(null, handleError);
以下是完整文章的link。
希望这有帮助。