Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript require()是否不同步运行?_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript require()是否不同步运行?

Javascript require()是否不同步运行?,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我正在尝试加载我创建的一个模块,加载时使用它的一些方法。但是,require之后的代码似乎在require实际完成之前执行 下面是一些代码: console.log(db); var db = require('../../models')(true, v); console.log(db); 两者都console.log输出未定义 以下是。/../models中的代码: module.exports = function(sync, v) { if(sync === true &

我正在尝试加载我创建的一个模块,加载时使用它的一些方法。但是,
require
之后的代码似乎在
require
实际完成之前执行

下面是一些代码:

console.log(db);
var db = require('../../models')(true, v);
console.log(db);
两者都
console.log
输出
未定义

以下是
。/../models
中的代码:

module.exports = function(sync, v) {
  if(sync === true && typeof v !== 'undefined') {
    var db = null;
    async.series([function(callback) {
      require('../lib/db_connect.js').connect(require('../lib/config.js').vars.db, function(res) {
        db = res;
        callback();
      });
    }], function() {
      return loadModels(db, v).models; // this returns the db instance with the models loaded
    });
  } else { /* other stuff */ }
});

但是,我看到连接调试在一段时间后在控制台中弹出(因此它被加载,只是不同步)。我做错了什么
async.series
应仅在完成所有操作后返回?最重要的是,不是返回未定义

您的
.connect
调用是异步的。您希望同步的是什么?您的
返回loadModels(db,v).models
行没有意义,因为在
async.series
的结果回调中返回不会返回到任何地方。您是对的。然而,如果我在我的模块中再深入一点,我会发现还有许多其他异步函数正在执行。除了将
sync
参数一直传递到所有调用之外,是否有其他方法可以同步实现我的db连接?例如,等待所有异步工作完成,然后将某些内容返回到
require
?创建一个模块,其中包含一个包含您想要的全局应用程序事件的EventEmmiter实例,并在数据库设置操作完成后通过发出一个事件来管理数据库设置?