Javascript 为什么功能流不能正常工作?
我正在开发一个nodeJS应用程序,我不能像我定义的那样在正常流程中调用函数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
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){}。。。我只想知道性能问题和复杂性。你不觉得它越来越复杂了吗?