2016-08-01 8 views
0

質問はタイトルと同じです モジュールファイルの中からmain node.jsサーバーファイルの関数を呼び出すことができますか?コールバック? それができない場合は、ある間隔でコールバックを使用して複数回コールすることはできますか?コールバックなしでモジュールファイル内からメインnode.jsサーバファイルの関数を呼び出すことはできますか?

例コード:

//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:

上記できない場合、..

次の行を変更することによりとそれにコールバックを を実行することも可能です
//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); 
    } 

乾杯。

+0

これは、コールバックやスコープとは何も関係ありません。しかし、あなたの質問は、server.jsからmFile.jsの関数を呼び出すことですが、どこに起こっているのかわかりません。あなたの質問の周りに他の方法がある場合は、明確に言葉を言わない。 – HeadCode

+0

@HeadCodeインターバル内の "Foobar.prototype.fooReady"を見てください。メインのserver.jsファイルでfoo()を呼びたいと思います。 – user2267175

+0

あなたのコードは、あなたの質問のテキストと一致していないようです。あなたの質問のテキストは、コールバック(私は以下に答えた)に関するすべてを尋ねますが、投稿したコードにはコールバックはありません。 – jfriend00

答えて

2

コールバックなしで モジュールファイル内のメインnode.jsサーバーファイルの関数を呼び出すことはできますか?

はい、コールバックなしで他のモジュールで同期関数を呼び出すことができます。これはちょうどMath.max()やJavascriptの普通の関数を呼び出すようなものです。

インターバルでコールバックを使用して複数回コールすることはできますか?

はい、可能です。

コールバックはさまざまな理由で使用されます。たとえば、Array.prototype.map()は、何度も同期的に呼び出されるように設計されたコールバックを使用します。これは、コールバックを使用するための完全に許容される方法です。

コールバックは、非同期操作の完了を示すためにも使用されます。その場合、通常は完了を示すために一度だけ呼び出されます。

しかし、setInterval()自体は、何度も呼び出されるように設計された非同期コールバックを使用します。だから、あなたは確かにその方法を設計することができます。


重要なことは、発信者が正確に何を期待するかを知っていることです。一回か二回以上呼び出されますか?それは同期または非同期に呼び出されますか?呼び出し元が何を期待するかを知っている限り、すべての状況が適切です。

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

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

または、間隔で起こっている他に何もない場合は、それもちょうどこの次のようになります:

//mFile.js 
Foobar.prototype.fooReady = function(callback){ 
    setInterval(callback, 1000); 
} 
あなたは確かにこのようなあなたの間隔のためのコールバックを使用することができます


+0

ありがとうございました:) – user2267175

関連する問題