Можно просто создать переменную перед вызовом getConnection
let id;
pool.getConnection(function(err, connect) {
connect.query(..., function(err, result) {
...
if(!err && result.length !== 0) {
id = result.id;
}
...
}
}
Но из-за того, что запросы к БД асинхронные Вы не сможете узнать когда значение запишется в переменную.
По этой причине в асинхронные функции передают коллбэк, который на вход получит результат выполнения асинхронного кода.
function createOrUpdateUsersCallback(err, result) {
if (err) {
console.log(err);
}
else {
// Use result.id as you want
}
}
function createOrUpdateUsers(callback) {
pool.getConnection(function(err, connect) {
connect.query(..., function(err, result) {
if(err) {
callback(err, null);
}
else {
// Do create or update
callback(null, result);
}
}
}
}
createOrUpdateUsers(createOrUpdateUsersCallback);
Но в современном мире с асинхронным кодом проще всего работать через промисы и async/await
На промисах это будет что-то вроде
const createOrUpdateUsersPromise = new Promise((resolve, reject) => {
function createOrUpdateUsers(callback) {
pool.getConnection(function(err, connect) {
connect.query(..., function(err, result) {
if(err) {
reject(err);
}
else {
// Do create or update
resolve(result);
}
}
}
}
})
const result = await createOrUpdateUsersPromise();
const id = result.id;