2015-10-13 3 views
1

Извините, если это основной вопрос. Я только начинаю свою третью неделю с программированием Node.js! Я оглянулся и не видел ответа на это, в частности. Может быть, это просто принято, отвечая на вопросы о child_process.spawn/fork теми, кто знает это, лучше, чем я.Неисправность задачи Node.js для самостоятельной работы

У меня есть приложение Node/Express, где я хочу взять HTTP-запрос, сохранить немного данных в Mongo, вернуть успех/ошибку, но ... в то же время начать процесс, чтобы взять некоторые из данные и выполнять поиск по веб-API. Я хочу сохранить эти данные обратно в Mongo, но нет необходимости передавать это сообщение HTTP-клиенту. (Я, вероятно, зарегистрирую успех/ошибку этого вызова где-нибудь.)

Как начать вторую задачу для запуска независимо от основного запроса, а не заставлять ответ ждать его завершения?

Вторая задача также будет записана в Node.js. Я бы хотел, чтобы это была просто другая функция в том же файле, если это было возможно.

Заранее благодарен!

+1

Отправьте ответ на запрос, а затем продолжите обработку остальной части. Вам не нужно ждать, пока вы закончите выполнение остальной части работы, чтобы отправить ответ на запрос. –

+0

Это действительно так просто? Я отдам его. Благодаря! –

+1

Чтобы быть абсолютно уверенным, вы можете переместить его в другой столбец с помощью 'process.nextTick (function() {/ * остальной код здесь * /})', таким образом синхронная логика также не задерживает его. –

ответ

2

Я не понимаю, зачем вам понадобится еще один процесс для создания другого процесса. В узле вы не ограничены жизненным циклом запроса HTTP, чтобы запускать такие вещи, как другие фреймворки. Это должно сделать это:

function yourHandler(req, res, next) { 
     dataAccess.writeToMongo(someData, function(err, res) { 
      var status = err ? 500 : 200; 
      // write back to response already! 
      res.status(status); 
      res.end(); 

      // do not completely terminate yet 
      // kick off web api call 
      apiClient.doSomething(); 
     }); 
} 
+1

Предполагаю, что я воспользовался устаревшими предположениями с других бэкэнд-языков, которые я использовал. * cough * PHP * cough * –

+0

Ха-ха, я сделал то же предположение, что и я, исходящий из aspnet :) – Daniel

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