我正在使用推送通知服务器(基于NodeJS),该服务器将数据存储在MS SQL数据库中。我需要的一个功能是检查设备是否已在我的数据库中注册。我这样编码 - 控制台信息用于调试目的:
function deviceExists(devicetoken, shopguid) {
sql.connect(config, function(err) {
if (err) {
console.log('Error: ' + err);
}
else {
var request = new sql.Request();
request.query("select top 1 devicetoken from notifications where devicetoken='" + devicetoken + "' and shopguid='" + shopguid + "'", function(err, recordset) {
if (err) {
console.log('Error: ' + err);
}
else {
console.log('Records: ' + recordset.length)
if (recordset.length === 0) {
console.log('recordset.length === 0, returning false device does not exist');
return false;
} else {
console.log('recordset.length !== 0, returning true device does exist');
return true;
}
}
});
}
});
console.log("Something went wrong, return true");
return true;
}
发生的事情是我总是会返回值。首先是函数结束时的true,然后是我检查记录集长度的真或假。我想我遇到了回调问题,但我不知道如何解决它。
我花了很长时间才能让它工作,它必须是我有限的JavaScript知识阻止我让它工作。我希望有人可以提供帮助。
答案 0 :(得分:0)
以下是在您自己的函数中使用异步函数调用的示例:
function someFunc( data1, data2, callback ) {
db.query("SELECT * FROM table1 WHERE id=?", [data1], function( err, results ) {
callback( results );
});
}
看看那里发生了什么?我的函数'someFunc'不会返回任何内容,它取决于回调对象(这是一个函数)在db查询内联函数回调完成后返回结果。
它会像这样使用:
someFunc( 32, 54, function ( results ) {
// results contains the results of the db query
results.forEach (...);
});