nodeWechat / wechat4u

微信 wechat web 网页版接口的 JavaScript 实现,兼容Node和浏览器,微信机器人
1.78k stars 306 forks source link

这里递归调用会导致栈溢出么? #72

Closed spacelan closed 8 years ago

spacelan commented 8 years ago

https://github.com/nodeWechat/wechat4u/blob/master/src/wechat.js#L324

  syncPolling () {
    this._syncCheck().then(state => {
      if (state.retcode !== CONF.SYNCCHECK_RET_SUCCESS) {
        throw new Error('你登出了微信')
      } else {
        if (state.selector !== CONF.SYNCCHECK_SELECTOR_NORMAL) {
          return this._sync().then(data => {
            setTimeout(() => {
              this.syncPolling()
            }, 1000)
            this._handleMsg(data)
          })
        } else {
          debug('WebSync Normal')
          setTimeout(() => {
            this.syncPolling()
          }, 1000)
        }
      }
    }).catch(err => {
      if (++this.syncErrorCount > 3) {
        debug(err)
        this.emit('error', err)
        this.logout()
      } else {
        setTimeout(() => {
          this.syncPolling()
        }, 1000)
      }
    })
  }
spacelan commented 8 years ago

这种尾递归是不是不会溢出

如果我让syncPolling返回一个Promise会是怎样?