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



我有两个模型(假设是model1和model2),它们都有多归属关系。Model2有model1的外键。

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

My Code for model2是这样的

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的数据呢?

如有任何帮助,不胜感激。

谢谢

不要使用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
});

async模块可用于此:

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

最新更新