【问题标题】:Vue Method returns [object Promise] [duplicate]Vue 方法返回 [object Promise] [重复]
【发布时间】:2019-12-24 09:20:29
【问题描述】:
<template>
    <div>
        <h1>{{ searchWord(rawString) }}</h1>
    </div>
</template>

<script>
import axios from 'axios';

export default {
    methods: {
        searchWord(rawString) {
            const splitRawString = rawString.match(/^(\w\w\w)\d/);
            if (splitRawString) {
                // If regex found a match
                return axios
                    .get(`https://www.url.com/path/${splitRawString[1]}`)
                    .then(response => {
                        return response.data;
                    })
                    .catch(error => error);
            }
        }
    }
};
</script>

在上面的例子中,我试图输出 axios 承诺的结果。

很遗憾,&lt;h1&gt; 标签的内容是:[object Promise]

如果我使用console.log(response.data);而不是return response.data,它可以工作。

【问题讨论】:

标签: vue.js axios


【解决方案1】:

那是因为你需要在函数上而不是在函数内部有.then。发生的事情是该函数没有完成执行并继续前进,因为您没有在它之后使用.then。 试试这个:

data: () => ({ something: null})
...
async searchWord(rawString) {
            const splitRawString = rawString.match(/^(\w\w\w)\d/);
            if (splitRawString) {
                // If regex found a match
                this.something =  await axios
                    .get(`https://www.url.com/path/${splitRawString[1]}`)

            }
        }
    }

在您的模板中粘贴 something 而不是函数本身。

【讨论】:

  • 由于searchWord 被标记为async 它......仍然返回一个承诺。这并不能解决问题。
  • 编辑了我的答案,调用搜索时调用该函数。
  • @Michael 我不想将响应数据分配给 Vue 数据函数。我想要这里的响应数据:{{ searchWord(rawString) }}。如您所见,searchWord 带有一个参数。
  • 那么您将不得不内联 .then 这不是一个好主意...您为什么不能只使用一个属性并将其内联?
猜你喜欢
  • 2021-05-04
  • 2020-04-03
  • 2018-03-25
  • 2021-08-01
  • 2023-02-25
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
相关资源
最近更新 更多