2016-09-26 2 views
0

Я новичок в узел JS, и есть метод в моем коде, который сохраняет информацию следующим образом:Регистрация методов для запуска в то же время - узел JS

var saveInformation = function(query, update, options) { 
    asyncTasks.push(function(done) { 
    what.findOneAndUpdate(query, update, options, done) 
    }) 
} 

saveInformation(query, update, options) 

я называю метод saveInformation на несколько случаях и необходимо записывать файлы журнала каждый раз при вызове этого метода. Каков самый простой способ сделать это?

Я попытался просто добавить свой журнал (я использую модуль Winston) сразу после, как это:

saveInformation(query, update, options) 
logger.info('Hello') 

Однако это иногда спасает, а иногда нет (т.е. он будет регистрировать только один раз, однако этот метод несколько раз выполняйте мою программу).

Так что мне интересно, есть ли способ добавить другой метод в строку saveInformation, чтобы гарантировать, что они оба запускаются одновременно, поэтому, когда saveInformation сохраняется в dbs, я также создаю журнал?

ответ

0

Вызов функции регистрации должен быть в обратном вызове функции what.findeOneAndUpdate, которая в этом случае равна done, таким образом она будет выполняться после каждой операции.

// callback for findOneAndUpdate 
var done = function(err, result) { 
    if(err) { 
     throw err 
    } 
    logger.info('Result of findOneAndUpdate: ', result) 
} 
// 

// original code 
var saveInformation = function(query, update, options) { 
    asyncTasks.push(function(done) { 
     what.findOneAndUpdate(query, update, options, done) 
    }) 
} 

saveInformation(query, update, options) 

Таким образом, всякий раз, когда saveInformation называется регистратор будет вызываться, если функция вызывается без ошибок, вы можете также изменить, что ошибки входа, а если вы хотите.

+0

Я вижу, что вы там делаете, однако в моем случае каждый logger.info имеет другой контент, поэтому, я думаю, у меня не было разных переменных для каждого регистратора. Поскольку их будет много. Любое другое решение? – deeveeABC

+0

@deeveeABC Если вы хотите, чтобы оператор ведения журнала печатался после операции findAndUpdate, он должен быть в обратном вызове. Поэтому вам придется подумать о способе отправки сообщения, которое должно быть записано в функцию обратного вызова. Вы также можете сделать оператор регистрации перед вызовом, указав, что запускается операция сохранения X, а другая в обратном вызове говорит, что операция Y была успешно завершена или с ошибкой. Он может содержать данные из сохраняемой модели, чтобы можно было отличать сообщения, например. –

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