javascript - Vue.js、Vuex 与 Promises

标签 javascript vue.js promise vuex

想象一下,我有一个 Vue 应用程序,其所需部分的结构如下:

enter image description here

我分为三个部分。地点:

<强>1。 Vue部分:

<template>
<div>
    <div v-if="displayTable" class="dataTable">
        ...
    </div>
</div>
</template>

<script>
    export default {
        ...
        methods: {
            getDataset: function() {
                this.$store.dispatch('getDataFromDB')
                    .then(() => {
                        if (this.$store.state.dataSet.length > 0) {
                            this.displayTable = true
                        }
                    })
            }
        }
        ...
    }
</script>

<强>2。 Vuex 部分

const actions = {
    ...
    getDataFromDB ({commit}, payload) {
        DataSources.apiGetData(payload.querystring)
            .then(dataset => commit(GET_DATA, {dataset}))
    }
    ...
}

<强>3。 axios部分

export const DataSources = {
    ...
    return apiGetData (queryString) {
        return axios.get('urlString').then(response => return response.data)
    }
    ...
}

目标:

我需要在商店的操作 中从数据库中检索和保存数据,然后才显示 div.dataTable。这就是 Promise 的功能。

问题:

在我的例子中,then() 首先处理部分。 我应该怎么做才能修复它?

最佳答案

默认情况下,this.$store.dispatch() 调用会返回一个 Promise,但是由于您没有在被分派(dispatch)的操作中返回任何内容,因此 Promise 会立即解析,然后 处理程序将在异步 getDataFromDB 操作完成之前执行。

您需要在 getDataFromDB 操作中返回调用 DataSources.apiGetData() 创建的 Promise:

getDataFromDB ({commit}, payload) {
  return DataSources.apiGetData(payload.querystring)
    .then(dataset => commit(GET_DATA, {dataset}))
}

这样,操作中的 Promise 就是 dispatch 调用返回的内容,并且 then 处理程序在异步操作完成之前不会触发。

关于javascript - Vue.js、Vuex 与 Promises,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49635425/

相关文章:

javascript - 选择不绑定(bind)数据ng-重复数据

javascript - 发布到 localhost 时 fetch 返回 400

javascript - 为什么 vuexfire 不更新状态但正确更新 ui?

javascript - 设置根元素时,IntersectionObserver 无法检测到交叉点

javascript - 如果在循环内抛出错误,则中断 promise 映射

node.js - 使用 bcrypt 来确保密码没有重复

javascript - 功能类似于 Promise.some/any 未知数量的 promise

javascript - 如何将json数据中的空格替换为_并为数据表的每一行添加超链接?

javascript - 渐进增强技巧

javascript - vue.js如何从服务器获取数据?