【问题标题】:Using commit in actions with promises returns 'Getters & Setters'在带有承诺的操作中使用提交会返回“Getters & Setters”
【发布时间】:2019-09-12 06:07:50
【问题描述】:

我正在使用 Vuex 的“操作”通过 API 从我的数据库中获取数据。

效果很好,我有一个console.log(jsonResponse),它显示了正确的数据。

但是,当我将commit('updateQuestions', jsonResponse) 添加到图片时,所有字段的返回值都是"Setters & Getters"

store.js:

mutations: {
    updateQuestionsInit: (state, payload) => {
        state.questions.init = payload
    }
},
actions: {
    onInit: async ({commit}) => {
        try {
        let response = await fetch('http://localhost:8080/api/mongo/initialforms')

            if (response.ok) {
                let jsonResponse = await response.json()
                console.log(jsonResponse)
                // Omitting the below line means it works.
                commit('updateQuestionsInit', jsonResponse)
            }
        }
        catch (error) {
            console.log('ERROR', error)
        }
    }
}

结果

预期结果

[
    {
        id: 0,
        type: "dropdown",
        value: "sku",
    }, ...
]

实际结果

[
    {
        id: Getter & Setter,
        type: Getter & Setter
        value: Getter & Setter,
        … 
    }, ...

]

为什么会发生这种情况以及如何纠正?

【问题讨论】:

  • “所有字段的返回值都是“Setters & Getters”是什么意思?你在哪里看结果?这是来自console.log(jsonResponse) 代码行吗?
  • commit() 函数是否修改了它传递的jsonResponse 对象?如果是这样,那么这可能是console.log(jsonResponse) 直到commit() 已经修改它之后才实际记录对象的问题。你可以通过 console.log(JSON.stringify(jsonResponse)) 来测试这个理论。
  • @jfriend00 是的,没错。
  • @jfriend00 我刚刚尝试了您的故障排除。 JSON.stringify() 按预期通过它。一旦它发生突变,我使用JSON.parse() 将它改回来,它仍然发生。 Setters & Getters 的这些属性现在处于我的状态,而不是实际值
  • 嗯,这显然是因为commit() 正在修改您的对象。去看看那个代码,而不是这个代码。这就是它被修改的地方。根据您目前显示的代码,我们没有其他建议。

标签: asynchronous vue.js promise action vuex


【解决方案1】:

您使用的是火狐吗?其他人也遇到过类似的问题,但对他们来说,这似乎适用于 chrome。显然,Firefox 在控制台中显示“Setters & Getters”,但基础值是正确的。

-> 切换到 Chrome 并查看问题是否仍然存在。


参考文献

Vue Getter & Setter instead of the actual values in backend response

https://discourse.mozilla.org/t/webextension-apis-made-as-getter-setter-lazily-evaluating-to-functions-beware-of-mocking-for-unit-tests/30849

【讨论】:

  • 谢谢!我可以确认基础值是正确的。我没有设置前面,所以我无法检查它是否正在通过。 Firefox 控制台欺骗了我!
猜你喜欢
  • 2017-05-22
  • 2017-12-21
  • 2019-01-21
  • 2019-07-30
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
  • 2018-07-06
  • 1970-01-01
相关资源
最近更新 更多