为啥计算内部的异步会产生无限循环(vue)?

Posted

技术标签:

【中文标题】为啥计算内部的异步会产生无限循环(vue)?【英文标题】:why does async inside computed make infinity loops (vue)?为什么计算内部的异步会产生无限循环(vue)? 【发布时间】:2020-04-14 09:15:41 【问题描述】:

我计算的组件是这样的:

export default 
  computed:  
    dataDoctorPerPage: async function () 
        const start = this.pagination.page * this.pagination.rowsPerPage - this.pagination.rowsPerPage;
        const end = start + this.pagination.rowsPerPage - 1;
        const doctors = this.dataDoctor
        const newDoctors = 
        let key = 0
        for(let item in doctors) 
            if(key >= start && key <= end) 
                for (let i = 0; i < doctors[item].length; i++) 
                    const params = 
                        hospitalId: doctors[item][i].hospital_id,
                        doctorId: doctors[item][i].doctor_id,
                    
                    await this.getDataSchedule(params) /* call async */
                    // console.log(this.dataSchedule)
                
                newDoctors[item] = doctors[item]
            
            key++
        
        return newDoctors
    
  

如果调用的 dataDoctorPerPage 将运行脚本

await this.getDataSchedule(params) 将通过 vuex 存储调用 async/api。我的问题就在那里。当我打电话给await this.getDataSchedule(params) 时,它会不停地循环

我的 vuex 商店是这样的:

const actions = 
  async getDataSchedule ( commit , payload) 
    const result = await api.getDataSchedule(payload)
    const items = result.data
    commit('setDataSchedule',  items: items )
  ,

我该如何解决这个问题?

computed中是否不能运行async?

【问题讨论】:

尝试阅读this和this @LoiNguyenHuynh 其实我试过了。但都是一样的 【参考方案1】:

计算不应使用async。如果你想这样做,你需要另一个库。 https://alligator.io/vuejs/async-computed-properties/

但是您想要做的是使用异步方法(在组件或存储中)并将数据设置在某处(在组件的数据或存储状态中),然后让您的计算值引用它。

【讨论】:

其实我试过了。但都是一样的 那你的代码有逻辑错误。显示“api”对象和突变。

以上是关于为啥计算内部的异步会产生无限循环(vue)?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个回调会产生无限循环

无限循环计算阶乘问题

为啥这会导致无限循环

Vue无限循环......在方法中

为啥以 char 作为索引的循环会无限循环?

为啥这段代码会进入无限循环? [复制]