我正在开发一个nodeJS应用程序,我不能像正在定义的那样在正常流程中调用函数。
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')
});
}
感谢名单
答案 0 :(得分:2)
orm对象的initialize方法是异步的。这意味着控件将被赋予跟踪异步方法,console.log(' 3')语句的代码,并且当initialize方法完成后,包含console.log的回调(&#39) ; 2')将被调用。
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();
});
}
答案 1 :(得分:0)
我看到回答是正确的 并且没有办法简单地做到这一点 您可以选择使用promises而不是回调 这是有用的比较 - http://spion.github.io/posts/why-i-am-switching-to-promises.html
答案 2 :(得分:-1)
请发布您的userModel。
注意:使用async
功能可能会导致此问题。