【发布时间】:2018-08-13 09:30:50
【问题描述】:
在一个 vue 动作中,我想轮询我的后端(调用另一个 async 动作,如下所述?),直到完成处理(前端显示加载器,直到进度结束)。
换句话说,我想反复进行 API 调用,看起来像:
actions: {
load: async ({dispatch, commit, state}, {args}) => {
await dispatch('progressPolling', {progressUrl, userId})
// continue ONLY when progress has finished, else blocks at this statement
...
}
progressPolling: async ({dispatch, commit}, {progressUrl, userId}) => {
var finished = false
while(!finished) : {
var progress = await dispatch('getResource', {url: progressUrl, userId: userId})
finished = (progress.data.finished === true)
// timeout of 2 secs
}
}
...
}
我的理解是,您可以使用 setTimeout() 语句在调用之间等待,但不确定如何将其转换为非阻塞 while 语句,或者只是实现此目的的最佳实践是什么。
编辑:“非阻塞”,因为我最初在 while 循环中使用了 wait() 语句。这使得 UI 每次必须等待时都会冻结。
【问题讨论】:
标签: vue.js async-await vuejs2 vuex