繁体   English   中英

您可以在没有回调的情况下从模块文件中的主node.js服务器文件中调用函数吗?

[英]Can you call a function in your main node.js server file from within a module file without a callBack?

问题正如标题所描述的那样,您可以在没有回调的情况下从模块文件中的主node.js服务器文件中调用函数吗? 而且,如果不可能的话,您可以间隔使用一次CallBack并多次调用吗?

示例代码:

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

编辑:

如果以上是不可能的,这将可能通过改变如下的回调做吧..

//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);
  }

干杯。

您可以在没有回调的情况下从模块文件中的主node.js服务器文件中调用函数吗?

是的,您可以在其他模块中调用同步函数而无需回调。 就像调用Math.max()或Javascript中的任何普通函数一样。

您可以间隔使用一次CallBack并多次调用吗?

是的你可以。

使用回调有多种原因。 例如, 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);
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM