Нужно получить данные из базы данных nodejs

У меня есть сервер, написанный на Java, на котором запущен Rhino для js, и я решил переписать этот сервер на nodejs ... И мне нужно получать данные из БД синхронно, например:

function executeRowsetParam(sql, p){
return DB.raw(sql,p)// returns object
}

так что я могу использовать это как:

var userName = executeRowsetParam('SELECT user_name FROM users where user_id = ?', ["123"]);

if (userName.getRow(0).getValue("user_name ") == "admin"){
//do sth
}

это просто простой пример, иногда мне нужно выбрать данные из базы данных, которые я должен использовать, например, в 1000 строк кода, поэтому код вроде:

executeRowsetParam('SELECT user_name FROM users where user_id = ?', ["123"]).then((r)=>{
if (r.getRow(0).getValue("user_name ") == "admin"){
//do sth
}
})

не сработает так хорошо ... У меня тоже есть такой код:

IfExists(SQL,p){
if (DB.raw("selecect top 1 1 from" + sql,p) == 1){
return true
}else{return false}

и переписав его на:

DB.raw("selecect top 1 1 from" + sql,p).then((r)=>{
if (r == 1){//do sth}else{//do else} 
})

не сработает для меня так что есть какой-то пакет npm, который я могу использовать для выбора из db synchronuch, который сделает мой день.

такой код будет в порядке?

    var Start = async () => {
var Server = require("./core/server/Server");
console.info('hi!');
console.dir("there is nothing to look at at the momment");
var db = require("./core/db/DB");
global.DB = new db()

 function foo() {
    return DB.executeSQL("asdasd", [123, 123])
}
console.dir(await foo());
console.dir('asd');
global.DEBUG = true;
global.NEW_GUID = require('uuid/v4');

var server = new Server()
server.start();
}
Start();

Достаточно ли этого, чтобы позволить мне использовать await в каждом отдельном экземпляре внутри сервера, или я должен сделать каждую функцию асинхронной, если бы я использовал await?

Я не совсем понимаю вопрос, но если вы просто ищете способ синхронного взаимодействия с БД, вам следует попробовать await / async.

Doug 04.05.2018 12:50

добавлен пример с async / await

Janso123 04.05.2018 13:17

Нет - вы должны сделать свои функции поиска в БД асинхронными (чтобы им нужно было возвращать Promise <Result>), а затем вызывающий код может просто позволить result = await lookupFunction (...). Если вы новичок в async / await, есть множество руководств, если вы его погуглите.

Doug 04.05.2018 13:23

хорошо, я посмотрю на них спасибо :)

Janso123 04.05.2018 13:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нашел и протестировал деасинхронизация, отлично работает!

var deasync = require('deasync');

module.exports = function DB(){
  var knex = require('knex')(require("./../../config").DB);

  this.executeRowsetParam = (sql, param) => {
    let done = false;
    knex.raw(sql, param).then((r => {
      done = r;
    })).catch((e => {
      throw "Error in query "+ e
    }))
    deasync.loopWhile(function () { return !done; });
    return done
  }
}

Другие вопросы по теме