使用async await遇到的问题?

一个方法里有两个setTimeOut,如何让第一个getData 500毫秒以后获取到数据,再执行1000毫秒之后的逻辑。
我遇到的问题是接口返回数据的时间比较久,有时2秒左右才返回,setStyle()执行了里边没有数据,如何让getData获取数据了再1000毫秒后执行setStyle(),我像下边这样好像还是不行,是什么原因?

init() {

   window.setInterval(this.startShow, 6000)
},
// 显示的动画
async startShow() {
  this.curIndex =;
  await this.getData()
  window.setTimeout(() => {
    this.setStyle()
  }, 1000)
},
// 获取数据
async getMapData() {
  await window.setTimeout( async () => {
    this.resData = {}
    let result = await Api.getData()
    if(result.status == 200) {
      this.resData = result.data
    }
  }, 500)
},
阅读 1.9k
1 个回答

windows.setTimeout 返回的并不是一个 Promise,而是一个用于 clearTimeout 的定时器编号,这个返回是立即执行的,并不是等 setTimeout 里面的 function 执行了之后才会返回,因此你 getMapData 里这样 await 并没有效果,你可以让 getMapData 返回一个 Promise,在 function 执行了之后再 resolve 就可以达到你想要的效果了。

getMapData() {
  return new Promise((res) => {
        window.setTimeout( async () => {
            this.resData = {};
            let result = await Api.getData();
            if(result.status == 200) {
              this.resData = result.data;
              res();
            }
        }, 500)
  });
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题