用NodeJs實現延遲呼叫,規避定時任務的閉包問題

2022-07-20 02:30:14 字數 1742 閱讀 9196

很多人在用nodejs的settimeout(callback, delay[, arg][, ...])編寫定時任務時,習慣上直接操作callback外部的物件object(閉包的特點)。這樣做有乙個隱患,就是當callback真正執行的時候,外部物件object可能已經被銷毀了(比如執行了自定義的銷毀方法),導致對object進行的處理結果出現了很大的偏差,程式甚至有可能出現異常而退出。

解決這個問題其實很簡單,我們只需要在callback**中重新通過某種方式獲取該物件,檢查一下該物件是否已被銷毀,即可避免上面描述的問題。但是,當程式中需要很多這樣的需求時,並且是乙個團隊在合作寫**,這樣就很難避免上述情況的發生。為了規避定時任務的閉包問題,我寫了乙個延遲呼叫類,**如下:

/**

* script: delaycall.js

* description: 延遲呼叫,規避定時任務的閉包問題

* authors: [email protected]

* date: 2016-04-19

*/var util = require('util');

var pqueue = require('./pqueue').pqueue;

/** * 延遲呼叫類

* @param search_func 物件查詢函式

*/var delaycall = exports.delaycall = function(search_func) ;

//延遲呼叫佇列

this._call_queue = new pqueue(delaycall.compare);

//物件查詢方法

this._search_func = search_func;

//設定間隔定時器。fixme:可以改為在框架的心跳機制中去執行run方法

//注:settimeout不支援修改系統時間

this._interval_id = setinterval(() => , 1000);

};//比較延遲呼叫

delaycall.compare = function(call1, call2) else

};//延遲呼叫序號自增

delaycall.prototype._addsequence = function() ;

/** * 延遲呼叫

* @param id 物件查詢方法_search_func根據id查詢出呼叫者物件

* @param method_name 呼叫者物件上要延遲呼叫的方法名

* @param params 要延遲呼叫的方法引數

* @param delay 延遲時間,單位秒

*/delaycall.prototype.call = function(id, method_name, params, delay) ;

this._call_queue.enqueue(call_elem);

this._call_map[call_id] = call_elem;

return call_id;

};//取消延遲呼叫

delaycall.prototype.cancelcall = function(call_id)

};//運轉一次

delaycall.prototype.run = function() else else }}

call_elem = pqueue.gethead();

}};

pqueue的實現請參考我的餓另一篇博文:用nodejs實現優先順序佇列pqueue

一種延遲方法呼叫的實現

原文 一種延遲方法呼叫的實現 需求場景 實現 定義任務介面 1inte ce itask 2 4 bool isrunning 5 void start 6 void stop 7 void run 8 定義延遲的資訊類 1class lazyitem 2 9 10public string key...

一種延遲方法呼叫的實現

原文 一種延遲方法呼叫的實現 需求場景 實現 定義任務介面 1inte ce itask 2 4 bool isrunning 5 void start 6 void stop 7 void run 8 定義延遲的資訊類 1class lazyitem 2 9 10public string key...

用NodeJs實現優先順序佇列PQueue

優先順序佇列 priorityqueue 是個很有用的資料結構,很多程式語言都有實現。nodejs是乙個比較新潮的伺服器語言,貌似還沒有提供相關類。這些天有用到優先順序佇列,因為時間很充足,閒來無事,就自己實現了一下。如下 script pqueue.js description 優先順序佇列類 a...