2012-04-03 5 views
0

Ich habe eine Klasse in node.js verwendet, und ich möchte verschiedene Objekte an diese übergeben, wenn es erforderlich ist.node.js Module übergeben Objekt an Singleton

Hier ist die Klasse:

var ItemHandler = (function() { 

      var items = new Array(); 

      return { 
      start: function (item, callback) { 

       items.push(item); 
       ItemHandler.timer(); 

      }, 
      timer: function() { 

       var timer = setTimeout(function() { 

        console.log('test'); 
        ItemHandler.timer(); 

       }, 1000); 
      } 
      }; 
     })(); 

module.exports = ItemHandler; 

Dies ist in einem meiner Wege, index.js genannt zu werden. Gefällt mir:

Ich würde gerne andere Objekte, die in meiner Route verwendet werden, an diese Datei übergeben. Ähnlich wie folgt aus:

var itemHandler = require('./lib/item.handler.js')(socket)(res); 

Hier würde ich in der Socket-Objekt werden vorbei (von socket.io Verbindung und eine Antwort zurückgegeben).

Wie würde ich meine Klasse strukturieren, um diese beiden Parameter zu akzeptieren?

Vielen Dank!

+0

, was Ihr tut ItemHandler Klasse brauchen diese Parameter für? Das könnte die Lösung stark beeinträchtigen. –

Antwort

1
function ItemHandler(param) { 
    var items = new Array(); 

    ItemHandler.start = function (item, callback) { 
    items.push(item); 
    ItemHandler.timer(); 
    }; 

    ItemHandler.timer = function() { 
    var timer = setTimeout(function() { 
     console.log('test'); 
     ItemHandler.timer(); 
    }, 1000); 
    } 

    return ItemHandler; 
}; 

module.exports = ItemHandler; 

ItemHandler jetzt eine Funktion so ist ...

var itemHandler = require('./lib/item.handler.js')(socket)(res); 
itemHandler.start(items); 

Oder:

var itemHandler = require('./lib/item.handler.js'); 
itemHandler(socket)(res).start(items); 

Hoffe, dass es funktioniert, habe es nicht getestet :)

+0

Danke, habe es noch nicht getestet, aber das würde die 'Singleton'-Natur der Klasse entfernen, oder? Obwohl ich denke, dass meine obige Implementierung auch nicht wirklich ein Singleton zu sein scheint, lässt sich das setTimeout umso häufen, je mehr es läuft. – dzm

+0

Ja, ich denke, mein Ansatz ist kein Singleton, da man 'new' nennen und ein neues Objekt bekommen kann ... aber warum würdest du das tun :). Deines ist es jedoch (teehnisch), aber in der Tat würden sich die Timer häufen. Sie können dies leicht ändern ... nur ein paar Bool das erste Mal timer() es angerufen. – mihai

+0

Guter Punkt - danke! – dzm