【发布时间】:2020-03-14 23:26:55
【问题描述】:
我的代码使用 Vuejs 中的插件功能来定义全局共享变量。
Vue.use(shared)
shared 定义为:-
export const shared = {
config: getAppConfig()
}
shared.install = function() {
Object.defineProperty(Vue.prototype, '$shared', {
get() {
return shared
}
})
}
function getAppConfig() {
var api = getAPIURL()
return axios.get("https://url/get_config")
.then(response => {
return response.data
}
}
我的问题是,在我的组件中,如果我使用这个变量this.$shared.config,我会得到undefined。
查看控制台窗口和调试语句,我的组件代码在插件有时间到this.$shared.config之前执行。
我是 javascript+Vuejs 的新手,但是当我研究这个错误时,它与 axios 异步有关,所以我决定返回 promise 并使用 await。
function getAppConfig() {
var api = getAPIURL()
return axios.get("https://url/get_config")
}
但是,在我的 shared.install 函数中,我尝试这样做:-
shared.install = function() {
let config = await shared.config
我收到错误:Syntax Error: await is a reserved word。
由于我是新手,我在如何使这段代码同步方面似乎犯了一个基本错误。解决此问题的正确方法是什么?
【问题讨论】:
-
如果应用配置如此重要,也许您应该延迟实例化您的 VueJS 应用,直到您收到来自端点的响应?
-
function getAppConfig不返回任何内容,因此结果为undefined- 问题二,await只能用于async的函数中... -
问题三我应该如何使这段代码同步 - 你不能。异步结果不能制作同步,除非您将检索结果的方式更改为同步 - 并且不推荐使用同步 XMLHttpRequest 并导致糟糕的用户体验
-
取决于您的使用情况 - 即您如何在组件中使用这些数据,npmjs.com/package/vue-async-computed 可能会有所帮助
-
@JaromandaX 我有一个用例,我的应用配置只能通过 HTTP 请求获取。安装新插件是唯一的方法吗?
标签: javascript vue.js promise