为什么functionstream程不正常?

我正在一个nodeJS应用程序工作,我不能像正在定义的正常stream程中调用函数。

console.log('1') require('../models/userModel')(UserCtrl);// inside this file i have console.log('2') console.log('3') 

对接我得到1 3 2,而不是1 2 3这是我的userModel代码

 var Waterline = require('waterline'), config = require('../config/db'), _ = require('lodash') orm = new Waterline() module.exports = function(refContObj){ var User = Waterline.Collection.extend({ identity: 'user', connection: 'myLocalDBConn', attributes: { first_name: 'string', last_name: 'string' } }); orm.loadCollection(User); orm.initialize(config,function(err, models){ refContObj.models = models.collections; console.log('2') }); } 

感谢名单

orm对象上的initialize方法是asynchronous的。 这意味着控制权将被赋予跟随在asynchronous方法console.log('3')语句之后的代码,并且当initialize方法完成时,包含console.log('2')的callback将被调用。

 require('../models/userModel')(UserCtrl, main); function main() { console.log('3'); } 

而userModel的代码应该是:

 var Waterline = require('waterline'), config = require('../config/db'), _ = require('lodash') orm = new Waterline() module.exports = function(refContObj, cb){ var User = Waterline.Collection.extend({ identity: 'user', connection: 'myLocalDBConn', attributes: { first_name: 'string', last_name: 'string' } }); orm.loadCollection(User); orm.initialize(config,function(err, models){ refContObj.models = models.collections; console.log('2'); cb(); }); } 

我看到callback的答案是正确的。
而且没有办法做到这一点。
您也可以使用promise来代替callback。
这是有用的比较 – http://spion.github.io/posts/why-i-am-switching-to-promises.html

请张贴您的userModel。 注意:使用asyncfunction可能会导致这种情况。