Мой скрипт node.js считывает строки из таблицы в базе данных 1, выполняет некоторую обработку и записывает строки в базу данных 2.
Скрипт должен завершиться после того, как все будет сделано.
Как я могу узнать, все ли было сделано, и выйти из узла?
Если у меня есть такая функция обратного вызова:
function exit_node() {
process.exit();
}
(Изменить: тем временем стало очевидно, что process.exit () можно также заменить на db.close (), но вопрос не в том, что туда вставлять. Вопрос в том, в какое время именно это делать, т. Е. как и где выполнить этот обратный вызов.)
Но его куда-то прикрепить непросто. После последнего чтения из db1 некорректно, потому что обработка и запись еще должны произойти.
Присоединить его к записи в db2 непросто, потому что он должен быть присоединен после последней записи, но каждая запись независима и не знает, последняя ли это запись.
Теоретически также может случиться так, что последняя запись завершена, но другая запись до нее все еще выполняется.
Изменить: извините, я вижу, что объяснение вопроса не является полным и, вероятно, сбивает с толку, но некоторые люди все еще поняли, и ниже есть хорошие ответы. Продолжайте читать комментарии и ответы, и вы получите полную картину.
Изменить: я мог подумать о каком-то механизме «блокирующего» контроллера. Различные части скрипта добавляют блокировщики к контроллеру для каждого открытого «задания» и освобождают их после завершения задания, а контроллер выходит из скрипта, когда больше нет бокеров. Возможно, async может помочь: https://github.com/caolan/async
Я также боюсь, что это взорвет код и неразумную логику.
db.close
(см. Документацию), результаты процесса и узел выйдут самостоятельно (без вызоваprocess.exit
). - person Aleksei Zabrodskii   schedule 03.06.2012