ajax polling 优化问题 insufficient

发布于 2022-09-06 06:11:41 字数 1767 浏览 23 评论 0

大哥大大, 事情是这样的, 要实时获取最新的一笔资料
假如游戏是每70秒开出一次结果, 现在要在地50秒的时候, 开始polling一直抓取结果直到抓到新的
直接上代码

fetchResult (Id) {
      return fetchGameResult(Id).then(
      result => {
        this.TimeGap = this.$moment(result[0].created_at).diff(result[1].created_at, 'ms')
        this.gameLatestResult = result[0]
        return result
      }
    )
    },
    pollResult (id) {
      if (!this.gameLatestResult) {
        return
      }
      let startPollingTIme = this.TimeGap - (20 * 1000)
      console.log(startPollingTIme)
      this.timer = setTimeout(() => {
        console.log('startPlooning到了')
        let oldResult = this.gameLatestResult
        this.interval = setInterval(() => {
          this.fetchResult(id).then(result => {
            let newResult = result[0]
            console.log('开始每两秒跳一次的interval直到换到新结果')
            console.log(newResult.issue_number !== oldResult.issue_number)
            if (newResult.issue_number !== oldResult.issue_number) {
              console.log('因为换到新结果所以clear掉')
              console.log(oldResult.issue_number)
              console.log(newResult.issue_number)
              clearInterval(this.interval)
              this.pollResult(id)
            }
          })
        }, (2 * 1000))
      }, startPollingTIme)
    }
    
    ```

但后来发现这样的处理, 假如一直放着给他跑, 不知为何会造成insufficient error,
也无法在固定时间点之前准确计算20秒前进行触发这个settimeout
api 格式是这样的

{
created_at:"2017-11-29T15:23:54.551984Z" // 用这个值的差来计算出TImeGap
created_by:null
issue_number:"171129763"
result_str: "xxx"
}
{
created_at:"2017-11-29T15:22:06.846063Z"
created_by:null
issue_number:"171129762"
result_str: "yyy"
}



想请问如何可以正常去实现这个功能, 并且优化(polling, 不考虑websocket)

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文