weexweex社区

WEEX H5 Render 解读(4)之定时器(setTime

2016-07-26  本文已影响1154人  cpu_driver

上篇文章我们阅读了weex的类的构造过程。


这节我们将要查看Weex的定时器。在js中我们知道定时器有两种,超时执行定时器和间隔执行定时器。但是在原生app中,只有超时执行定时器。可能weex为了兼容原生开发,只提供了一种定时器--超时执行定时器(setTimeout)。

由于webpack的打包,我们只能在调试模式下才能看到源码或者在weex timer可以看到。


下面我贴出浏览器中的time.js的代码

'use strict'

const timer = {
  setTimeout: function (timeoutCallbackId, delay) {
/*sender = Sender {
                instanceId: "http://127.0.0.1:8081/weex_tmp/h5_render/?hot-reload_controller&page=tech_list.js&loader=xhr",
                 weexInstance: Weex
          }*/
    const sender = this.sender
    const timerId = setTimeout(function () {
      sender.performCallback(timeoutCallbackId)
    }, delay)
    return timerId
  },
  clearTimeout: function (timerId) {
    clearTimeout(timerId)
  }
}
timer._meta = {
  timer: [{
    name: 'setTimeout',
    args: ['function', 'number']
  }, {
    name: 'clearTimeout',
    args: ['number']
  }]
}
module.exports = timer
/** WEBPACK FOOTER **
 ** ./html5/browser/api/timer.js
 **/

我们可以看到这里面定义了两个方法,setTimeout和claerTimeout。

timer._meta = {
  timer: [{
    name: 'setTimeout',
    args: ['function', 'number']
  }, {
    name: 'clearTimeout',
    args: ['number']
  }]
}

这句代码中._meta是为weex注册apimodule使用的。这在browser/api/index.js中可以得到验证:


如果想使用setInterval,那么可以使用setTimeout模拟,代码如下:

var intervalId=function(){
                require('@weex-module/timer').setTimeout(function(){
                    _this.user.timeoutNum=_this.user.timeoutNum-1;
                    intervalId();
                },1000);        
          };
      intervalId();
上一篇下一篇

猜你喜欢

热点阅读