У меня есть коллекция вызовов для использования внутренней базы данных, но я не могу использовать данные из-за асинхронных вызовов c. Я вижу запись базы данных в моем асин c вызове, когда я помещаю ее в массив, поэтому вызов GET-запроса работает. Проблема в том, что когда я вызываю эту функцию, чтобы вернуть эту запись базы данных, это все еще обещание по какой-то причине? Несмотря на то, что я возвращаю массив ??
Я пытался использовать .then и помещать его в массив, но я не получаю окончательный результат при получении в качестве возврата. Тестовая переменная печатается после строки 'this is before', и я предполагаю, что из-за этого асинхронного вызова c. Чего я не понимаю, так это того, что я добавил .then и поместил результат в массив, который я возвращаю. Как я могу использовать функцию, которую я настроил для использования данных запроса БД? Я хочу вызвать apiGetRecord () и сделать что-то с данными.
Вот где я бы сначала позвонил со стороны клиента:
// some scratch file for testing
let test = apiGetRecord(
{"tablename": "item_table",
"column_name": "item_id",
"value": "123"
}
);
console.log('this is before');
console.log(test); // test is promise
Это вызывает
// this is client side
async function apiGetRecord(record) {
let returnstr = [];
let paramarg = record;
await axios.get('http://localhost:3000/tables/getrecord', {
params: paramarg
}).then(function(response){
console.log('get-a-record get request sent');
returnstr.push(response.data);
return returnstr;
}).catch(function(error){
console.log(error);
});
}
Внутри returnstr (тип массив) я могу видеть запись базы данных, когда я отлаживаю и прошагаю. Так что это там, я просто не могу вернуть его по какой-то причине ??
Чтобы завершить sh поток программы, вышеприведенное затем делает запрос GET к конечной точке, которую вы видите (запрос GET работает и также работает от почтальона). Я проверил необработанный ответ от ax ios, и он находится внутри results.row. Теперь приведенное выше вызовет внутреннюю сторону моей node.js, которая является функцией ниже, и, наконец, ниже будет запрашивать мою базу данных для получения этой записи таблицы.
// this is on the server-side which then queries the database
function getARecord(request,response) {
const rec = request.query;
console.log(rec);
let this_sql = format('SELECT * FROM %I WHERE %I = %L', rec.tablename, rec.column_name, rec.value );
pool.query(this_sql, (error, results) => {
if (error) {
throw error
}
console.log(results);
response.status(200).json(results.rows)
})
}