Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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 为什么功能流不能正常工作?_Javascript_Node.js_Express_Sails.js_Waterline - Fatal编程技术网

Javascript 为什么功能流不能正常工作?

Javascript 为什么功能流不能正常工作?,javascript,node.js,express,sails.js,waterline,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. 这是我的用户模型代码 var Waterline = require('waterline'), config

我正在开发一个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. 这是我的用户模型代码

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') 
    });
}

Thanx

请发布您的用户模型。
注意:使用
async
函数可能会导致这种情况。

orm对象上的初始化方法是异步的。这意味着该控件将被赋予遵循异步方法console.log('3')语句的代码,当initialize方法完成时,将调用包含console.log('2')的回调

require('../models/userModel')(UserCtrl, main);

function main() {
  console.log('3'); 
}
用户模型代码应为:

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();

    });
}

我看到了答案,回答是正确的。
没有比这更简单的方法了。
您可以选择使用承诺而不是回调。
以下是有用的比较-

您需要展示一个我们可以尝试的完整示例,包括第二个console.log调用的位置。感谢Bogdan Rotund,您的解决方案非常有效。但是有没有其他方法可以避免这种嵌套函数调用呢?函数(arg,cb){}然后函数cb(arg,SecondCB){}。。。我只想知道性能问题和复杂性。你不觉得它越来越复杂了吗?