【发布时间】:2020-04-06 05:05:03
【问题描述】:
我需要在created() 中调用下面的方法。为此,我需要将created() 设为async。根据 Vue 文档,created() 被同步调用。 Vue Framework await 会在 created() 上避免任何竞争条件吗?
this.isAuthenticated = await authService.isAuthenticated();
【问题讨论】:
-
作为评论发布,因为它是轶事:我在使用 async 和 created 方面取得了不同程度的成功。例如,当
mounted中的某些内容依赖于created中异步调用的解析时,使created异步并不能修复竞争条件,因为mounted将在created完成之前开始执行。也就是说,将async附加到created()不会抛出错误,您当然可以在其中使用await。 -
GitHub 上关于它的讨论非常长(异步生命周期挂钩)。它提供了很多关于它为什么有用的很好的讨论,以及为什么它还没有完成(在讨论中):github.com/vuejs/vue/issues/7209 ...如果你想阅读更多关于它的信息。
-
@MattU 在发布我的解决方案之前,我在 Github 上搜索了这个帖子,找到了 Vue 的作者的声明,其中他说生命挂钩将是异步的。我找不到它。你会联想到这样的说法吗?
-
这也是 Angular 和 React 中的反模式以及 Vue 中的 AFAIK。解决方案是将 Promise 移到组件之外,在 Promise 完成之前不要实例化它。