vue-resource如何设置同步异步?

如题,现有一分页插件,需要通过vue-resource请求数据后再进行初始化,vue-resource能都设置同步异步呢?

阅读 16.6k
6 个回答

为什么要同步呢?
你可以放置一个加载中的状态在页面中,然后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}&sectionId=${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
      }

可以使用路由钩子函数 beforeRouteEnter
先请求到数据再切换页面。

直接jquery ajax走起,发现vue-resource用起来也就那样

新手上路,请多包涵

vue-resource有个Interceptors就是你想要的吧

可以用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')
    ...
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题