为什么功能流不正常?

时间:2015-02-03 08:33:09

标签: javascript node.js express sails.js waterline

我正在开发一个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') 
    });
}

感谢名单

3 个答案:

答案 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功能可能会导致此问题。