Получение топора ios GET HTTP-запроса данных ответа на NodeJS Express из общей функции - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть коллекция вызовов для использования внутренней базы данных, но я не могу использовать данные из-за асинхронных вызовов 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)
    })
}
...