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

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

本文关键字:文件 调用 js 函数 服务器 node 情况下 回调 模块      更新时间:2023-09-26

问题如标题所述,您是否可以在模块文件中调用主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);
  }

干杯。

您可以从没有回调的模块文件?

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

你能在一段时间内使用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);
 }