У меня есть массив документов с уникальным _id, и я хочу вставить их в свою базу данных. Некоторые из них уже находятся в db, и для тех, кому я хочу обновить свойство массива (нажмите массив в элементе). Все это мне нужно сделать asyncronuosly, поэтому после вставки/обновления я хочу написать ответ назад (с обратным вызовом) клиенту, чем все нормально, или написать ошибку. После поиска по теме я нашел это solution with async module Я попытался реализовать его для своего дела. Теперь мой код выглядит так:Создание butch upsert in mongodb: callback никогда не запускается
function processUsers(arr, listName, callback) {
var users = global.db.collection('vkusers');
var q = async.queue(function(task, cb) {
console.log('upsert butch');
users.insert(task.doc, function(err, doc) {
if (err) {
users.update({
_id : task.doc._id
}, {
$addToSet : {
mLists : listName
}
}, function(error, result){ console.log(error); console.log(result); });
}
});
}, arr.length);
for (var doc in arr) {
q.push({
doc : arr[doc]
}, function(err) {
if (err)
callback(err, null);
})
}
q.drain = function() {
// this is the queue's callback, called when the queue is empty,
// i.e. when all your documents have been processed.
console.log('drain');
callback(null, { result: "success", upserted: arr.length });
}
}
Обратный звонок имеет обратный вызов (ошибка, результат), arr - мой массив документов. Я тестировал его, и с базой данных все в порядке, я получаю правильный результат. Но callback, и q.drain никогда не срабатывали!
Большое спасибо, все работает нормально! –