在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 在node里如何構(gòu)建一個帶事件觸發(fā)的計時器?

在node里如何構(gòu)建一個帶事件觸發(fā)的計時器?

都知道node的異步讓它搞什么定時功能都不方便,

比如啟動定時器A后,一秒鐘后執(zhí)行funtion B。但只要中途出現(xiàn)了事件C,那么即時觸發(fā)functionD,然后A重新記時。像這種功能該如何實現(xiàn)?

回答
編輯回答
心上人
都知道node的異步讓它搞什么定時功能都不方便

這個還真不知道,除了時間不太準(有別的任務在執(zhí)行沒空檢測timer)。node有很多模塊如 node-schedule可以處理定時任務。

比如啟動定時器A后,一秒鐘后執(zhí)行funtion B。但只要中途出現(xiàn)了事件C,那么即時觸發(fā)functionD,然后A重新記時。像這種功能該如何實現(xiàn)?

當然如果你的需求只是這樣其實處理起來也很簡單,舉個栗子。

const EventEmitter = require('events');

class MyTimerEmitter extends EventEmitter {

    constructor() {
        super();
        this._timerA = null;
    }

    run() {
        this._timerA = setTimeout(() => { console.log('finish') }, 1000)
    }

    reset() {
        clearTimeout(this._timerA);
        this.run();
    }
}

const mte = new MyTimerEmitter();
mte.on('reset', function() {
    console.log('reset!');
    this.reset();
});

mte.run();


function test(i = 0) { //測試途中觸發(fā)了10次reset事件
    if (i < 10) {
        i++;
        setTimeout((j) => {
            mte.emit('reset');
            test(j);
        }, 500, i)
    }
}
test()
2018年8月4日 20:46