Vue 计算属性返回一个承诺?

Posted

技术标签:

【中文标题】Vue 计算属性返回一个承诺?【英文标题】:Vue computed property returning a promise? 【发布时间】:2019-07-01 00:45:25 【问题描述】:

我有一个触发 API 调用并返回数据的计算属性:

async ingredients() 
    const url = "/api/ingredients";

    const request = new Request(url, 
      method: "GET",
      credentials: "same-origin"
    );

    const response = await fetch(request);
    const json = await response.json();
    //debugger;
    return json;

我在其中的调试器会在页面加载时捕获并包含我希望看到的所有数据(变量 json 是一个包含我的项目的数组)。

但是当我查看 Vue Dev 工具中的 Vue 组件时,它只是说:

ingredients:Promise

我一直在工作中使用相同的结构,但我不知道这有什么不同。如果我在浏览器中点击 API 路由,我会看到预期的 JSON。

我正在像这样迭代它:

<tr v-for="(ingredient, index) in ingredients" :key="index">

但由于这里的ingredients 只是指一个 Promise,所以表格没有呈现。

我不确定这是否重要,但我使用的是 Vue/Laravel 组合。 Laravel 端工作正常,API 调用返回到我期望的 URL。

【问题讨论】:

Async Computed in Components - VueJS?的可能重复 【参考方案1】:

这里的原因是计算属性在 Promise 完成后实际上不会更新,因为它们对 setter 和 getter 进行操作 - 所以在这里使用 vuex dispatch 或任何其他 Promise 都不起作用。

如果您在 created() 生命周期中触发您的函数,那么应该这样做。此外,如果您需要能够动态更改配方,您可以设置一个观察者来捕捉任何更新。

data: () => (
    ingredients: null,
)

watch: 
    ingredients(nexVal, preVal) 
        // do some stuff here
    


created() 
    this.ingredients = myAsyncCallForIngredients()

【讨论】:

以上是关于Vue 计算属性返回一个承诺?的主要内容,如果未能解决你的问题,请参考以下文章

03.《Vue.js》charp-03 计算属性

Vue的计算属性

Vue.js 计算属性

(Vue -03)Vue绑定样式 + 计算属性 + 侦听器+ 过滤器

Vue没有根据方法更新计算属性,但是直接调用时相同的方法返回正确的值

Vue.js 如何从方法更改计算属性?