检查某些查询是否未定义并在这种情况下定义回调
Check if some query is undefined and define a callback in that case
我正在尝试做这样的事情:
var query = 'select max(count) from ' + series +
' where value = \'' + search + '\'';
if (db.query(query, callback) !== undefined) {
return callback;
} else {
return callback = [{
name: series,
columns: ['time', 'max'],
points: [
[0, 0]
]
}];
}
我正在尝试验证该查询是否未定义或所搜索的元素在 influxdb 中不存在,然后准备回调,就像该元素存在时一样,if 语句有效,但 else return 空数组
db 参数是数据库配置所在的位置。
编辑:
感谢 Osukaa 的回答。我尝试了你的建议,但没有回应。这是包含您的更改的完整函数:
var counter = function (config, callback) {
var count = 'select max(count) from ' + series + ' where value = \'' + search + '\'';
db.query(count, function (err, res) {
if(err) return err;
if(res.length == 0){
return [{
name: series,
columns: ['time', 'max'],
points: [
[0, 0]
]
}];
}else{
return res;
}
});
};
console.log 显示一个空数组。
编辑 2:
谢谢@Osukaa,不幸的是这不起作用,这是 returns 的错误:
调试:处理程序,错误 {"msec":395.7593630000483,"error":"Couldn't find series: items.type.updated"} 调试:内部,错误 错误:找不到系列:items.type.updated
编辑 3:
我已经解决了尝试创建系列时的问题。当该系列不存在时,显示此错误'Error Couldn't find series [series name]',所以我将此代码放在错误代码中:
db.query(qCount, function(err, res) {
if (err) {
if (err == 'Error: Couldn\'t find series: ' + name.series) {
res = newSeries;
return callback(null, res);
} else {
return callback(err);
}
} else {
if (res.length !== 0) {
return callback(null, res);
} else {
res = newSeries;
return callback(null, res);
}
}
});
当错误等于 'Error: Couldn\'t find series: ' + name.series 时,我传递值来创建它们。
谢谢。
异步代码不是那样工作的。当db.query
完成后会自动执行callback
代码。你没必要做 return callback
。相反,你可以尝试这样的事情:
db.query('select max(count) from ' + series +
' where value = \'' + search + '\'' + ';', function (err, res) {
if(err) return err;
if(res.length == 0){
return [{
name: series,
columns: ['time', 'max'],
points: [
[0, 0]
]
}];
}else{
return res;
}
});
编辑
首先你GET
获得计数
request.get('/itemCount')
.query({value: value.type})
.end(function(err, res) {
if (err) {
reply(err);
} else {
countElemnts(res.body[0].count);
}
});
因此服务器转到路由并执行处理程序:
server.route({
method: 'GET',
path: '/itemCount',
handler: function(request, reply) {
events.selectCount({
series: 'value.type',
search: request.url.query.value
}, function onSuccess(err, data) {
if (err) {
reply(err);
} else {
var result = {};
if (data.length !== 0) {
result = data[0].points.map(function(element) {
return {
count: element[1] + 1
};
});
reply(null, result);
} else {
reply(null, data);
}
}
});
}
});
它本身调用selectCount
函数来获取数字(我将callback
更新为return (null,res)
)
var selectCount = function(config, callback) {
var qCount = 'select max(count) from ' + config.series +
' where itemType = \'' + config.search + '\'';
db.query(qCount, function(err, res) {
if (err) {
return callback(err);
}else{
if (res !== undefined) {
return callback(null,res[0]);
}else{
var res = [{
name: config.series,
columns: ['time', 'count'],
points: [
[0, 0]
]
}];
return callback(null,res);
}
}
});
};
当回调完成时,它应该执行 countElements
:
var countElemnts = function(count) {
superagent
.post(config.eventsApiUrl)
.type('json')
.send({
name: 'items.type.updated',
data: {
id: request.params.id,
itemType: item.itemType,
count: count
}
})
.end(function() {
reply({
message: 'Item actualizado'
});
});
};