Node.js 如何在自定义实例方法中使用findOne查询方法

Node.js 如何在自定义实例方法中使用findOne查询方法,node.js,sails.js,waterline,Node.js,Sails.js,Waterline,我正在努力做到以下几点: // Task Model module.exports = { schema: true, attributes: { directProy: { type: 'string', required: true }, user: { type: 'string', required: true }, checkUser: {

我正在努力做到以下几点:

// Task Model

module.exports = {
 schema: true,             
 attributes: {

    directProy: {
        type: 'string',
        required: true
    },
    user: {
        type: 'string',
        required: true
    },
    checkUser: {
        type: 'boolean',
        defaultsTo: false
    },
    proy: {
        type: 'string',
        required: true
    },
    pieza: {
        type: 'string',
        required: true
    },
    hours: {
        type: 'string',
        required: true
    },
    obs: {
        type: 'text',
        defaultsTo: "lorem ipsum"
    },
    check: {
        type: 'boolean',
        defaultsTo: false
    },
    userName: function() {
        User.findOne(this.user).done(function(err, user){
            if(err){ return err;}
            return user.name;
        });
    }
}
})

在方法“userName”中,我试图获取一个用户名,该用户名的ID存储在“user”属性中

但是当我运行“username”方法时,返回“undefined”,我认为这一定是异步类型的问题


如果他们能给我帮助,我将不胜感激,因为我不知道如何关联价值观​​在模型之间,这非常有用

尝试传递回调

userName: function(cb) {
    User.findOne(this.user).done(function(err, user){
       cb(err, user.name);
    });
}
model.userName(function(err, username) {
   console.log(username);
});
然后,当您调用它时,请确保传递回调

userName: function(cb) {
    User.findOne(this.user).done(function(err, user){
       cb(err, user.name);
    });
}
model.userName(function(err, username) {
   console.log(username);
});

您应该使用
.exec
而不是
.done
,因为它在中不可用sails@0.10

@磁带下面的答案是正确的,但对于您的情况——如果您使用的是Sails v0.10.x——您应该只使用模型关联,并在用户和任务之间建立一对多关联。见文件。