如题,现有一分页插件,需要通过vue-resource请求数据后再进行初始化,vue-resource能都设置同步异步呢?
这个问题也是困扰我一个上午,查了很多方法想让vue支持同步请求,但都失败了。于是我打算使用原生js的请求方法,来让页面实现同步请求的功能。毕竟原生的js 在哪个框架下都是可以使用的。附上代码:
// js发送同步请求
let userId = this.user.userId
let sectionId = this.currentSection
let request = new XMLHttpRequest()
request.open('POST', `/${prefixApi}learning-progress?userId=${userId}§ionId=${sectionId}`, false) // 第三个参数 false 代表设置同步请求
request.setRequestHeader('Accept', 'application/json');
request.setRequestHeader('Content-Type', 'application/json');
request.send(JSON.stringify({learningCompleted: this.learningCompleted, playbackTime: this.currentTime}))
if (request.status === 200) {
console.log('success')
} else {
this.NETWORK_MODAL.show = true
}
可以用async-await机制解决这个问题,例如:var a = await this.$http.get('some url')
在获得响应前,程序就在此处等待。收到响应后,按一般方法处理响应对象a即可。需要注意的是包含await的方法必须用async修饰。例如在vue的component的方法(methods)定义中,可以定义如下方法:
some_method: async function(...){
...
var a = await this.$http.get('some url')
...
}
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
2 回答4.8k 阅读✓ 已解决
4 回答4.4k 阅读✓ 已解决
4 回答1.9k 阅读✓ 已解决
为什么要同步呢?
你可以放置一个加载中的状态在页面中,然后
vue-resource
去异步请求数据,请求完成并完成插件初始化后进行数据填充,不是很好的选择吗?