Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
421 views
in Technique[技术] by (71.8m points)

微信小程序中Promise,碰到setInterval,clearInterval的困惑,能解释下么?

下面这段代码,经过实际验证是正确的,用于发送验证码等待60秒用的,
只不过它的原理不懂,当执行promise的时候,程序执行了setInterval,每秒执行一次函数,但是promise的回调then里已经写了停止计时器,照理不可能59,58,57的执行下去啊,为什么还能正确执行?
`

timer: function () {

var that = this
let promise = new Promise((resolve, reject) => {
  let setTimer = setInterval(
    () => {
      that.setData({
        second: that.data.second - 1,
        btntitle:that.data.second+'s',
        disabled:true
      })
      if (that.data.second <= 0) {
        that.setData({
          disabled:false,
          btntitle:'发送验证码',
          second:60
        })
        resolve(setTimer)
      }
    }
    , 1000)
})
promise.then((setTimer) => {
  clearInterval(setTimer)
})

}

`


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
if (that.data.second <= 0) {
  that.setData({
    disabled: false,
    btntitle: '发送验证码',
    second: 60,
  });
  // then后面的代码要等promise resolve之后才执行
  // 也就是代码运行到这里才清除定时器
  resolve(setTimer);
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...