如何在 vuex 动作中使用 promise

How to use promise in vuex actions

最近,我正在尝试使用vuex和vue-resource实现一个RESTful api。但是当我使用vuex动作调用服务器时api,我遇到了以下问题

我的代码是这样的:

import api from '../api/api.js'

const actions = {
getData (context, userId) {
  api.get('https://jsonplaceholder.typicode.com/posts/1')
      .then((response) => console.log(response));//undefine
  }
}

我在 api.js 中的代码如下所示

import Vue from 'vue';

export default {
get(url, request) {
     return Vue.http.get(url, request)
         .then((response) => {
           Promise.resolve(response.body);
           console.log(response.body);//ok
         })
         .catch((error) => Promise.reject(error));
    },
}

我 api.js 的响应很好。但是动作的响应是不确定的。如果有人可以提供帮助,那就太好了?

如果您用大括号括起箭头函数,您现在需要手动 return 一些您没有做的事情。

此外,将答案包装在 Promise.resolve 内部回调到 then 是没有意义的。就 return response.body.

最后,.catch((error) => Promise.reject(error));毫无意义。你最终得到了与你已经拥有的完全相同的东西,你完全删除了整个 catch... 行代码,因为你只是拒绝了你已经被拒绝的相同错误。

换句话说,返工为:

import Vue from 'vue';

export default {
get(url, request) {
     return Vue.http.get(url, request)
         .then((response) => {
           return response.body;
         });
    },
}

这个动作的想法是它应该通过提交更新状态中的数据.. 然后你在 Vue 组件中使用存储数据.. 动作应该是无效的 return ..

您还应该通过 store.dispatch('getData', 有效负载) 之类的东西调用操作.. 但由于它 return 是一个承诺,您可以等待然后() store.dispatch 上的逻辑......(实际上应该这样做)