2014-10-08 3 views
0

Я не совсем понимаю, почему это не работает:Mongoose удалить в async.parallel

async.parallel([ 
    SomeStuff.find({}).remove, 
    SomeStuff2.find({}).remove, 
    SomeStuff3.find({}).remove 
], done); 

в то время как это работает нормально

async.parallel([ 
    function(callback) { 
    SomeStuff.find({}).remove(callback) 
    }, 
    function(callback) { 
    SomeStuff2.find({}).remove(callback); 
    }, 
    function(callback) { 
    SomeStuff3.find({}).remove(callback); 
    } 
], done); 

Разве это не практически то же самое? Первый выдает ошибку:

TypeError: Object #<Object> has no method 'cast' 
at Query.remove (/path/to/project/node_modules/mongoose/lib/query.js:1366:10) 

Спасибо за вашу помощь :)

+0

'.remove' не привязан к контексту - это просто функция в тот момент, я думаю. Вы можете сделать Query.remove.bind (SomeStuff.find ({})) Я думаю, но тьфу. –

ответ

0

Проблема заключается в том, что вы теряете контекст функции, когда вы передаете саму функцию, как это. remove() - прототип, поэтому он полагается на правильность значения this. Когда вы передаете метод самостоятельно, значение this теперь теряется, поэтому он больше не может делать такие вещи, как this.cast().

+0

Да, я понял, спасибо! Для достижения того, что я хотел, я могу использовать привязку lodash: 'var query1 = SomeStuff.find ({});' 'var query2 = SomeStuff2.find ({});' 'var query3 = SomeStuff3.find ({ }); ' ' async.parallel ([' ' _.bind (query1.remove, query1), ' ' _.bind (query2.remove, query2), ' ' _.bind (query3.remove, query3), ' '], сделано); ' – ma2s

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