WEEX H5 Render 解讀(4)之定時器(setTimeout,setInterval)

上篇文章我們閱讀了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();
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容