在模型内同步执行实例方法

时间:2014-03-11 06:37:37

标签: node.js mongodb sails.js

我有两个模型(比如说model1和model2),两者都属于hasmany属于关系。 model2具有model1的外键。

我想访问model2实例方法中的model1数据。

我的模型2代码是这样的

module.exports = {
    attributes     : {
        name         : {
            type       : 'url',
            required   : true,
            unique     : true
        },
        model1       : {
            model      : 'Model1',
        },
        model1Data   : function() {
            var data = [];
            sails.models.model1.findOne(
                {'id':this.model1}
            ).done(function(err, model1) {
                data.push(model1);
            });
            return data;
        }
    },
};

这里当我调用model1.model1Data()时,它返回一个空数组,因为函数是异步执行的。

那么如何获取model1的数据?

任何帮助都将不胜感激。

由于

2 个答案:

答案 0 :(得分:0)

请勿使用return data。向model2.model1Data()函数添加回调参数。

// ...
model1Data   : function(cb) {
  var data = [];
    sails.models.model1.findOne(
      {'id':this.model1}
      ).done(function(err, model1) {
         data.push(model1);
         cb(err, data)
    });
    // return data;
}
// ...

然后你可以这样打电话给model2.model1Data()

sails.model2.model1Data(function(err, data) {
  if (err) return;

  // process the data here
});

答案 1 :(得分:0)

异步模块可用于此:

var async = require('async');
//
async.series{[

    //this will always run first
    function(callback) {
        //do your model1 logic
        callback();
    },

    //this will always run second
    function(callback) {
        //do your model2 logic, which will enable you to find your model1Data
        callback();
    }
]};