Javascript vue异步函数返回[对象承诺]

Javascript vue异步函数返回[对象承诺],javascript,vue.js,axios,vuex,es6-promise,Javascript,Vue.js,Axios,Vuex,Es6 Promise,更新 我想做的是: 我正在开发一个permissionerMixin,它应该为经过身份验证的用户处理网站权限。 例如,如果登录用户没有权限查看网站的特定部分,我将使用v-if=allowedToSee来处理组件。到现在为止,一直都还不错。我将整个用户权限对象存储在vuex存储中 数据来自rest api,如下所示: 常量权限=[ { 名称:'findMe1', 值:false, }, { 名称:“findMe2”, 值:false, }, { 名称:“findMe3”, 值:false, },

更新

我想做的是:

我正在开发一个permissionerMixin,它应该为经过身份验证的用户处理网站权限。 例如,如果登录用户没有权限查看网站的特定部分,我将使用v-if=allowedToSee来处理组件。到现在为止,一直都还不错。我将整个用户权限对象存储在vuex存储中

数据来自rest api,如下所示:

常量权限=[ { 名称:'findMe1', 值:false, }, { 名称:“findMe2”, 值:false, }, { 名称:“findMe3”, 值:false, }, { 名称:“findMe4”, 值:false, } ] 现在回到mixin以及如何从api加载数据:

从“axios”导入axios; 导出常量permissionerMixin={ 方法:{ 异步GetRightsFlomactiveUser{ get`/not/the/real/path/${this.$store.state.User.activeUser.id}` .thenresponse=>{ 返回此。$store.commit'addActiveUserRights',response.data; } .catcherror=>{ console.logerror.response; }; }, 异步权限ForRightName{ const rights=wait this.getRightsFromActiveUser; 为康斯特权利{ 如果right.name==rightName{ 返回正确的值; } } } } } 正如你所看到的,我有两个共同工作的函数。 getRightsFromActiveUser只是我在开头提到的正确对象的一个getter。 它获取实际数据并将其放入vuex存储区中,并带有一个变异:

常量状态={ 活动用户:{ id:0, 权限:{} } }; 常量getters={}; 常量动作={}; 常数突变={ addActiveUserId状态,id{ state.activeUser.id=id; }, addActiveUserRights状态,权限{ state.activeUser.permissions=权限; } }; 导出默认值{ 状态 获得者, 行动, 突变, }; 在这之后,我们就有了实际的init函数permissionForrightName,它应该发挥神奇的作用,并应该给我一个布尔返回值来处理权限

现在的一个大问题是,我没有得到布尔返回,而是得到了一个[对象承诺],这是因为我很愚蠢,我脑子里没有得到承诺的东西

最后,我只想将此函数添加到具有


v-if=permissionFor'whatEver'来解决权限处理。

在提交之后将返回值拉入它自己的语句中。不确定您的响应对象从后端看起来是什么样子,但我个人认为这看起来更干净,以后可以阅读。看看它,看看事情是如何变化的,如果有的话

import axios from 'axios';
export const permissionerMixin = {
  methods: {
    async getRightsFromActiveUser() {
      try { 
        let returnData = await axios.get(`/not/the/real/path/${this.$store.state.User.activeUser.id}`)
        this.$store.commit('addActiveUserRights', response.data);
        return returnData.data
      } catch (error) {
        console.log(error.response);
      }
    },
    async permissionFor(rightName) {
      try {
        const rights = await this.getRightsFromActiveUser();
        for (const right of rights) {
          if (right.name == rightName) {
            return right.value;
          }
        }
      } catch(error){
        console.log(error.response);
      }
    }
  }
}

我打开了你的代码,我看到的第一件事是混合链式承诺。然后是异步/等待。我会说选择一个并坚持下去。第二件让我不舒服的事情是返回这个.store.commit'addActiveUserRights',response.data;您将返回实际提交。你是否应该储存和归还?我会把它写在一个答案里,让你看看,也许会有帮助。我从未尝试记录提交的返回以查看它给了您什么。您得到了什么?仍然是相同的[object Promise]如果您在axios调用之后直接对returnData.data对象进行console.log,您会得到什么?我得到了请求的数据,但代码也进入了permissionFor->catcherror{console.logerror.response;}我试着做一个代码沙盒