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

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设置好后的值。

阅读 25.4k
2 个回答

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这个数组
})

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

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


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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题