Среда Node.js асинхронная . Те операторы, которые изменяют «final», находятся внутри обратных вызовов, которые выполняются только после завершения операций базы данных. Код сразу после инициализации операций базы данных, в которые вы записываете результат, выполняется задолго до выполнения этих обратных вызовов.
Вы уже почти наткнулись на ответ на проблему: вы не должны записывать результат до завершения операций, что, как вы знаете, будет иметь место в обратных вызовах. Если вам нужно дождаться окончания обоих (кажется, что вы это делаете), то вы можете сделать что-то вроде удержания счетчика во внешней области видимости. Каждый обратный вызов может увеличивать счетчик и вызывать одну и ту же функцию записи результатов только тогда, когда счетчик показывает, что оба обратных вызова завершены. (У меня есть идея, что у среды выполнения Node есть более причудливый способ делать подобные вещи, но я не настолько знаком с этим. В простом случае, подобном этому, сохранить что-то вроде счетчика достаточно просто.)
Кроме того, несвязанное примечание: эту переменную «ClientConnectionReady», вероятно, следует записать как определение функции:
function ClientConnectionReady(client) {
// ...
}
или это должно быть объявлено с var
. (Я немного удивлен тем, что это не выдает ошибку, но опять же я не так хорошо знаком с Node.js.)