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