axios 异步请求后.then()后再接.then()要怎么写

发布于 2022-09-06 22:59:16 字数 633 浏览 13 评论 0

doctorComments(this.$route.params.hid, this.$route.params.fid, this.doctorHisId, this.createdon, this.pageno, 5)  //1.axios请求数据
.then(d => {//2.处理数据
  let dc = new Array()
  for(let i=0;i<d.list.length;i++){
    dc[i] = {doctorComments:d.list[i],isZhanshiComment:false}
  }
  this.doctorComments = this.doctorComments.concat(dc);
  this.$refs.scroller.donePullup();
  
})
.then(()=>{//3.调用方法
    this.$options.methods.compareHeightComment();
})

3.里面调用的方法需要doctorcommts这个数组的信息。想要用js promise的相关方法去链式调用,但是我这么写3里面的方法仍然取不到2里面设置的数据。取2里面的数组长度length是undfined。
vue.js.
各位大神,3里面的方法怎么才能取到2设置好后的值。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦在深巷 2022-09-13 22:59:16

return给你个例子 箭头函数后面有大括号要加return

Promise.resolve(1).then(v=> {
    console.log(v)//1
    return 123;
}).then(v => {
    console.log(v)//123
})
doctorComments(this.$route.params.hid, this.$route.params.fid, this.doctorHisId, this.createdon, this.pageno, 5)  //1.axios请求数据
.then(d => {//2.处理数据
  let dc = new Array()
  for(let i=0;i<d.list.length;i++){
    dc[i] = {doctorComments:d.list[i],isZhanshiComment:false}
  }
  this.doctorComments = this.doctorComments.concat(dc);
  this.$refs.scroller.donePullup();
  return this.doctorComments;
})
.then((v)=>{//3.调用方法 
    console.log(v);v就是this.doctorComments这个数组
})
宁愿没拥抱 2022-09-13 22:59:16

后来查明原因。this在then之后调用的方法里指向不是当前vue实例。如果在调用的方法里面使用this,就会一直找不到值。按照李十三大神的用法在promise之前传入当前vue实例。

let that = this;//promise 之外
...//中间的其他逻辑
.then() //链式调用
.then(func(that){...}); //调用其他方法


//其他方法
func(that){
that.xxx   //vue的各类操作。
that.xxx
}

调用的方法里面使用这个that实例。
最终严格来讲是作用域的问题。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文