Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Vuex状态内使用异步初始化的API?_Javascript_Vue.js_Vuex - Fatal编程技术网

Javascript 如何在Vuex状态内使用异步初始化的API?

Javascript 如何在Vuex状态内使用异步初始化的API?,javascript,vue.js,vuex,Javascript,Vue.js,Vuex,我向大家介绍了Vue+Vuex,我很难弄清楚在哪里初始化一个具有异步初始化方法的API 显然,我不能在异步函数之外等待,如下所示: import { RequestSystemProxy } from "../../assets/scripts/RequestSystemProxy" const system = new RequestSystemProxy(); const handle = await system.Initialize(); const state = { ... }

我向大家介绍了Vue+Vuex,我很难弄清楚在哪里初始化一个具有异步初始化方法的API

显然,我不能在异步函数之外等待
,如下所示:

import { RequestSystemProxy } from "../../assets/scripts/RequestSystemProxy"

const system = new RequestSystemProxy();

const handle = await system.Initialize();

const state = { ... };

const getters = { ... };

const actions = { ... methods that use 'handle' ... };

const mutations = { ... };

export default {
    state,
    getters,
    actions,
    mutations
}
Vue不喜欢我导出这样的承诺:

import { RequestSystemProxy } from "../../assets/scripts/RequestSystemProxy"

export default (async function () {

    const system = new RequestSystemProxy();

    const handle = await system.Initialize();

    const state = { ... };

    const getters = { ... };

    const actions = { ... methods that use 'handle' ... };

    const mutations = { ... };

    return {
        state,
        getters,
        actions,
        mutations
    }

})();
我的意图是使用
handle
内部
actions
来发出各种异步请求,但在
handle
解决之前,这显然是不可能发生的

我在这里有点不知所措,我不知道放在哪里最好。我想在初始化Vue应用程序之前,我可以全局初始化
句柄
,但从结构上讲,初始化与使用它的地方相去甚远。有这样做的典型方法吗


任何帮助都将不胜感激

您需要在您的商店中创建
操作
(这只是方法而已)

const actions = {
  async actionName({ state }) {
    // write your code in here
  },
}
你也可以写这个

export default {
  namespaced: true,
  state,
  getters,
  actions,
  mutations
};

操作可以是异步的,因此只需存储对您的
系统的引用。Initialize()
promise,并通过等待该承诺得到解决来为每个操作添加前缀

从“../../assets/scripts/RequestSystemProxy”导入{RequestSystemProxy}
const system=new RequestSystemProxy()
const initPromise=system.Initialize()
常量状态={…}
常量getters={…}
常量突变={…}
常量动作={
异步exampleAction(上下文){
const handle=等待初始化承诺
//现在使用手柄
}
}
导出默认值{
国家,,
获得者,
行动,
突变
}

另一种选择是让您的模块(我们称之为
store.js
)导出承诺

从“../../assets/scripts/RequestSystemProxy”导入{RequestSystemProxy}
const system=new RequestSystemProxy()
导出默认系统。初始化()。然后(句柄=>{
//现在初始化你的商店。。。
返回{
国家,,
获得者,
//等
}
})
然后在你的
main.js
(或其他)中使用承诺

从'path/to/store.js'导入storePromise'
storePromise.then(store=>{
新Vue({
商店,
//等
}).$mount(“#应用程序”)
})

注意:在初始化和装载根
Vue
实例之前,这需要考虑如何处理UI。

看起来您正在尝试执行该函数,同时以结尾()导出它。尝试执行export default async()=>{}@DevonNorris我认为OP用于执行函数对我来说似乎是一种模式,但idkI确实用于执行函数。我不想返回函数本身,我想立即调用函数并导出其结果
{state,getter,actions,mutations}
我认为您应该将这个函数/文件导入到您想要使用它的文件中。在另一个函数中,只需调用
const{state、getter、actions、mutations}=wait fileImport()