я бы попробовал как-то так:
function insert(tableName, values) {
return this.pool.query(`INSERT INTO ${tableName}(username, password, image) VALUES('${values.join("', '")}')`)
.catch(err => {
// if TABLE doesn't exists
if (err.errno == 1146) {
return this.createTable(tableName)
.then(newTable => {
console.log('New table created!\n', newTable);
return this.insert(tableName, values);
})
} else {
throw err;
}
});
}
1. если "this.pool.query" возвращает промис, то новый создавать смысла нет.
2. Если из then или catch вернуть проми то дальше можно продолжать цепочку
3. В этом коде SQL Injection - в зависимости от используемого пакета надо посмотреть как правильно передавать параметры в запрос что бы избежать этой уязвимости