2016-08-01 5 views
0

Frage ist, wie der Titel beschreibt, Können Sie eine Funktion in Ihrem Haupt node.js Server-Datei aus einer Moduldatei ohne ein CallBack aufrufen? Und wenn das nicht möglich ist, können Sie ein CallBack in einem Intervall verwenden und es mehrmals aufrufen?Können Sie eine Funktion in Ihrer Hauptdatei node.js server innerhalb einer Moduldatei ohne CallBack aufrufen?

Beispielcode:

//Main server.js file 
var moduleFile = require('./mFile'); 
... 

var foobar = moduleFile.addFoobar(); 

if(foobar) foobar.fooReady(); 

function foo(bar){ 
    //do something. 
} 


//moduleFile/mFile.js 

var foobars = []; 

function Foobar(){ 
    this.id = 0; 

    Foobar.prototype.fooReady = function(){ 
    setInterval(function(){ 
     //call foo(); in main file..? 
    }, 1000); 
    } 

} 

var addFoobar = function(data) { 
    var foobar = new Foobar(); 
     foobar.id = foobars.length+1; 

    foobars.push(foobar); 
    return foobar; 
} 

module.exports.foobars = foobars; 
module.exports.addFoobar = addFoobar; 

EDIT:

Wenn dies nicht möglich ist, wäre es möglich, es mit einen Rückruf zu tun, indem Sie die folgenden Zeilen zu ändern ..

//main server.js 
if(foobar) foobar.fooReady(foo); 

//mFile.js 
Foobar.prototype.fooReady = function(callback){ 
    setInterval(function(){ 
     //can you call foo(); in main file via callback(); on every interval run? 
    }, 1000); 
    } 

Prost.

+0

Das hat nichts mit Callbacks und allem was mit Scope zu tun hat zu tun. Ihre Frage bezieht sich jedoch auf das Aufrufen einer Funktion in server.js FROM mFile.js, aber ich sehe nicht, wo das geschieht. Wenn es umgekehrt ist, ist Ihre Frage nicht klar formuliert. – HeadCode

+0

@HeadCode siehe "Foobar.prototype.fooReady" Innerhalb des Intervalls möchte ich foo() in der Hauptdatei server.js aufrufen. – user2267175

+0

Ihr Code scheint nicht mit dem Text Ihrer Frage übereinzustimmen. Der Text Ihrer Frage fragt nach Rückrufen (die ich unten beantwortet habe), aber ich sehe keine Rückrufe in dem Code, den Sie gepostet haben. – jfriend00

Antwort

2

Können Sie eine Funktion in Ihrer Hauptdatei node.js Server aus einer Moduldatei ohne CallBack aufrufen?

Ja, Sie können synchrone Funktionen in anderen Modulen ohne Rückruf aufrufen. Das ist so, als würde man Math.max() oder irgendeine andere Funktion in Javascript aufrufen.

Können Sie einen CallBack in einem Intervall verwenden und mehrmals anrufen?

Ja, Sie können.

Rückrufe werden aus einer Vielzahl von Gründen verwendet. Zum Beispiel verwendet Array.prototype.map() einen Rückruf, der so ausgelegt ist, dass er viele Male synchron aufgerufen wird, und das ist ein vollkommen akzeptabler Weg, einen Rückruf zu verwenden.

Rückrufe werden auch, um anzuzeigen, die Beendigung einer asynchronen Operation verwendet. In diesem Fall werden sie normalerweise nur einmal aufgerufen, um die Vervollständigung anzuzeigen.

Aber setInterval() selbst verwendet einen asynchronen Rückruf, der oft zu bekommen genannt wurde entwickelt, um. So können Sie sicherlich auch so einen entwerfen.


Wichtig ist, dass Ihr Design klar ist, damit der Anrufer genau weiß, was zu erwarten ist. Wird es einmal oder mehrmals aufgerufen? Wird es synchron oder asynchron aufgerufen? Alle sind in einigen Situationen angemessen, solange der Anrufer weiß, was zu erwarten ist.


Sie können natürlich auch einen Rückruf für Ihr Intervall wie folgt verwenden:

//main server.js 
if(foobar) foobar.fooReady(foo); 

//mFile.js 
Foobar.prototype.fooReady = function(callback){ 
    setInterval(function(){ 
     callback(); 
    }, 1000); 
} 

Oder, wenn es geht nichts anderes in dem Intervall, wäre es auch nur dies:

//mFile.js 
Foobar.prototype.fooReady = function(callback){ 
    setInterval(callback, 1000); 
} 
+0

Vielen Dank für Ihre Hilfe :) – user2267175

Verwandte Themen