timers.md 2.6 KB
Newer Older
D
DCloud_LXH 已提交
1 2
# Timers

DCloud-yyl's avatar
DCloud-yyl 已提交
3
## 全局方法
D
DCloud_LXH 已提交
4

D
DCloud_LXH 已提交
5
### setInterval(handler, timeout?, ...arguments)
D
DCloud_LXH 已提交
6 7 8 9 10 11 12 13 14 15 16

<!-- UTSJSON.Timers.setInterval.description -->

<!-- UTSJSON.Timers.setInterval.param -->

<!-- UTSJSON.Timers.setInterval.returnValue -->

<!-- UTSJSON.Timers.setInterval.compatibility -->

<!-- UTSJSON.Timers.setInterval.tutorial -->

D
DCloud_LXH 已提交
17
### setTimeout(handler, timeout?, ...arguments)
D
DCloud_LXH 已提交
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

<!-- UTSJSON.Timers.setTimeout.description -->

<!-- UTSJSON.Timers.setTimeout.param -->

<!-- UTSJSON.Timers.setTimeout.returnValue -->

<!-- UTSJSON.Timers.setTimeout.compatibility -->

<!-- UTSJSON.Timers.setTimeout.tutorial -->

### clearInterval(id)

<!-- UTSJSON.Timers.clearInterval.description -->

<!-- UTSJSON.Timers.clearInterval.param -->

<!-- UTSJSON.Timers.clearInterval.returnValue -->

<!-- UTSJSON.Timers.clearInterval.compatibility -->

<!-- UTSJSON.Timers.clearInterval.tutorial -->

### clearTimeout(id)

<!-- UTSJSON.Timers.clearTimeout.description -->

<!-- UTSJSON.Timers.clearTimeout.param -->

<!-- UTSJSON.Timers.clearTimeout.returnValue -->

<!-- UTSJSON.Timers.clearTimeout.compatibility -->

H
hdx 已提交
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
<!-- UTSJSON.Timers.clearTimeout.tutorial -->

示例代码

```html
<script>
  export default {
    data() {
      return {
      }
    },
    methods: {
      timerSetTimeout() {
        // 定义 setTimeout 返回值
        let timerID = 0;

        // 启动 setTimeout 并更新 timerID
        timerID = setTimeout(() => {
          // 执行一次
          console.log('setTimeout', timerID);
        }, 1000)

        // 取消
        // clearTimeout(timerID)
      },
      timerSetInterval() {
        // 定义 setInterval 返回值
        let timerID = 0;

        // 启动 setInterval 并更新 timerID
        timerID = setInterval(() => {
          // 周期执行 (1000毫秒)
          console.log('setInterval', timerID);

          // 取消
          clearInterval(timerID)
        }, 1000)
      }
    }
  }
</script>
```
杜庆泉's avatar
杜庆泉 已提交
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107

### Android平台差异

需要注意:JS环境中只有一个线程,所以 `setTimeout/setInterval` 执行任务代码的线程和 调用 setTimeout/setInterval 总是同一个线程。

但是Android平台需要分两种情况:

+ 如果在主线程/dom 线程 等具备`Looper` 环境的线程调用`setTimeout/setInterval`: 那么可以确保 任务代码执行的线程 和调用setTimeout/setInterval的线程 是同一个线程。

+ 如果在匿名线程等 不具备 `Looper` 环境的线程中调用`setTimeout/setInterval`: 任务代码不会和 调用setTimeout/setInterval的线程 保持同一线程。


关于 `Android`系统`Looper`[更多介绍](https://developer.android.com/reference/android/os/Looper)