node.js – 确定每行asynchronous函数由于没有行而未被调用

我试图编写代码,如果SQLite查询不会返回结果将被执行。 但是,Node.js的asynchronous特性使得这很困难。 我不知道是否可以在callback函数中编写代码,因为当我testinginput时会导致空的结果,没有任何反应。

我正在做

db.each("SELECT pid, collection , photo FROM photos WHERE collection = '"+collection_id+"' AND pid = '"+photo_id+"' ", function(err, row) { console.log("PHOTO FOUND"); //code inside the callback function }); //code I want 

具体来说,我想呈现一般的东西,万一用户请求不在分贝的东西,我该怎么办?

这是来自您似乎使用的软件包的API文档 (重点是我的):

Database#each(sql,[param,…],[callback],[complete])

使用指定的参数运行SQL查询,并针对每个结果行调用callback。 该函数返回数据库对象以允许函数链接。 参数与Database#run函数相同,但有以下区别:

callback的签名是function(err, row) {}如果结果集成功但是为空,则不会调用callback。 在所有其他情况下,对于每个检索到的行,调用都会被调用一次。 调用顺序完全对应于结果集中行的顺序。

所有的行callback被调用后,完成callback将被调用,如果存在。 第一个参数是一个错误对象,第二个参数是检索到的行数。 如果只指定一个函数,则将其视为行callback,如果指定了两个函数,则第一个(倒数第二个)函数将作为行callback,最后一个函数将作为完成callback。

如果您知道查询只返回非常有限的行数,那么使用Database#all可能会更方便一次检索所有行。

所以,你的代码应该看起来像这样:

 var sql = "SELECT pid, collection , photo FROM photos WHERE collection = '"+collection_id+"' AND pid = '"+photo_id+"' "; db.each(sql, function(err, row) { console.log("PHOTO FOUND"); //code inside the callback function }, function(err, rows) { if (rows == 0) { //code I want } });