for循环查询mysql_javascript – for循环中的node.js mysql查询

我有两个问题.

首先,

SELECT auctions.name, wowitemdata.itemName, auctions.itemId,

auctions.buyout, auctions.quantity

FROM auctions

INNER JOIN wowitemdata ON auctions.itemId = wowitemdata.itemID;

返回这样的数据:

{

name: 'somename',

itemName: 'someitemname',

itemId: '0000',

buyout: '0001',

quantity: '5',

}

第二个查询使用来自#1的数据来获得比itemId便宜的项目的count().响应将作为新元素添加到#1 – > “削弱”.

我的功能:

function checkUndercut(data, length){

var Select = 'SELECT COUNT(auctions.itemId) AS cnt ';

var From = 'From `auctions` ';

var Where = 'WHERE auctions.itemId LIKE ? AND buyout < ?';

var sql = Select + From + Where;

for(i = 0, len = length; i < len; i++){

var inserts = [data[i]['itemId'], data[i]['buyout']];

var ssql = mysql.format(sql, inserts);

data[i]['undercut'] = i;

connection.query(ssql, function(err, rows, fields){

if(!err){

console.log("check Undercut: " + rows[0].cnt);

data[i]['undercut'] = rows[0].cnt;

} else {

console.log("Error while performing Query");

};

});

};

}

由于查询的异步性质,我不能使用for循环i var来追加数据.

我该如何解决这个问题?

编辑:

我的新问题:

当我搜索名称(searchobj)时,返回的数据落后一步.

说我搜索“蒂姆”,没有任何显示.

说我接下来搜索“Finn”,我的“Tim”数据显示出来.

我怀疑这是因为我从checkUndercut函数中获取数据的方式.

我创建了一个新的顶级var,appdata,并在使用了@simple_programmers建议后,我把我的新代码放到这样:

function(err){

if(err){

//handle the error if the query throws an error

}else{

appdata = data;

console.log(appdata);

//whatever you wanna do after all the iterations are done

}

});

console.log发出正确的信息所以我的问题在于get函数过早地发送响应.

我的获取功能:

app.get('/test',function(req, res) {

console.log("app.get "+searchobj);

var sqlSELECT = 'SELECT auctions.name, wowitemdata.itemName, auctions.itemId, auctions.buyout, auctions.quantity ';

var sqlFROM = 'FROM `auctions` ';

var sqlINNER ='INNER JOIN `wowitemdata` ON auctions.itemId = wowitemdata.itemID ';

var sqlWHERE = 'WHERE auctions.name LIKE ?';

var sql = sqlSELECT + sqlFROM + sqlINNER + sqlWHERE;

var inserts = [searchobj];

var sql = mysql.format(sql, inserts);

//console.log("Query: "+sql);

connection.query(sql, function(err, rows, fields) {

if (!err){

var rowLen = rows.length;

checkUndercut(rows, rowLen);

console.log(appdata);

res.send(appdata);

} else {

console.log('Error while performing Query.');

};

});

});

我的问题:

1从异步函数发送数据的正确方法是什么?

2有没有什么方法可以让我的app.get或res.send等到我的数据被检索后再发送?

编辑2:我可以通过将所有代码放在我的app.get()中来实现它,但必须有一个更优雅,更容易阅读的解决方案吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值