我有一个网络应用程序,它定期向 3rd 方服务(比如 Facebook、Twitter 等)轮询数据。此轮询/请求是通过 JSONP 进行的(以避免跨域问题)。
例如,一个简单的请求会是这样的:
function jsonp_callback() {
// Do something
}
var url = 'http://some.service.com/getresult?callback=jsonp_callback';
$http.jsonp(url);
但是,由于可以在任何给定时间发出另一种类型的请求(例如:发送或发布更新),我创建了一个包装器来处理回调。
实现是这样的:
// Callback handler
var myCb = (function() {
var F = function() {};
F.prototype.fn = {};
F.prototype.create = function(fn, scope) {
var self = this;
var id = new Date().getTime();
self.fn[id] = function() {
if (typeof fn === 'function') {
fn.call(scope);
}
}
return 'myCb.fn.' + id;
}
return new F();
})();
// JSONP request
var cb = myCb.create(function() {
// Do something
});
var url = 'http://some.service.com/getresult?callback=' + cb;
$http.jsonp(url);
如果您注意到,一段时间后,myCb.fn将变得臃肿,因为旧的或已经执行的回调。Mu 的问题是,我是否需要创建一种机制来垃圾收集那些已被执行且不再需要的人?