2015-08-31 2 views
0

У нас есть отношения «многие-ко-многим» в Mongoose. Объект поддерживается для повторения всех объектов, которые он ссылается перед сохранением. Мы пытаемся использовать lodash, чтобы генерировать функции правильного контекста, но все мы получаем массив nullmongoose & lodash: __.map возвращает массив нулей

Вот код:

PartnerSchema.pre("save", function(done) { 
    var updaters = __.map(this.partner, function(partner) { // this.partner is an array of ObjectIds 
    // this runs, and the argument is fine 
    var update = function updateThing(cb) { 
     Company.findOne({_id: partner}, function(err, company) { 
     if (err) return cb(err); 
     company.partners = __.map(company.partners, function(partner) { 
      if (partner._id === this._id) { 
      return this; 
      } 
      else { 
      return partner; 
      } 
     }) 
     company.save(function(err, rowsAffected) { 
      cb(err); 
     }) 
     }) 
    } 
    console.log(update); // [Function] 
    return update; 
    }) 
    // updaters is now [null, null] 
    async.parrallel(updaters, function() { 
    done(); 
    }) 
}) 

EDIT: мы выяснили, почему не излучаются никакой ошибки. Mongoose ate them all!. Переход до 4.0.8 показывает, по крайней мере, ошибку. Undefined не является функцией, как и ожидалось.

ответ

1
var updaters = _.map([1,2,3], function(i) { 
    var update = function updateThing(j) { return console.log(i, j) }; 
    console.log(update); 
    return update 
}) 

, что пример кода работает отлично на сайте lodash

Попробуйте проверить this.partner аргумент и убедитесь, что вы не переопределять update и updaters переменные в любом месте в этом модуле

Если у вас возникли проблемы - просто перейдите от этого образца кода в новый файл и расширьте его, чтобы вы могли найти что-то не так.

Смежные вопросы