我有一个用Java编写的服务器,为js运行Rhino, 我决定将此服务器重写为nodejs ... 我需要从DB同步获取数据:
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 synchron中选择,这将是我的一天。
像这样的代码会好吗?
var Start = async () => {
var Server = require("./core/server/Server");
console.log('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,我是否让每个函数都异步?
答案 0 :(得分:0)
找到并测试deasync效果很好!
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
}
}