在节点js中使用sqlite回调方法

时间:2014-03-26 13:33:03

标签: node.js sqlite

我尝试使用node.js创建一个新程序,该程序读取SQLite DB并创建XML文档。我创建了一些子方法,当我尝试使用回调方法返回DB结果时,它没有传递任何东西。

读取和创建xml部分的方法:

function dbpic(id,callback){
      dd = db1.all("SELECT * FROM pictures left join item_pics on item_pics.picid=pictures.picid where item_pics.itemid = "+id+"", function(err1,rows1){
            var ee = '';
            rows1.forEach(function(row1) {
                ee += '<picture>';
                    ee+='<picturename>'+row1.pic+'</picturename>';
                    ee+='<link>'+row1.url+'</link>';
                ee += '</picture>';
            }); 
            console.log(ee);
            callback( ee);
        });
}

使用以下方法调用此方法:

dbpic(row.iid,function(df){
    ss += df;
}); 

将显示变量ss,但它不会从回调方法中获得任何内容。数据库包含相关数据并返回正确的结果结果。我使用console.log检查了它们。

当我使用控制台记录df时,它会正确显示结果。但ss未存储df个数据。

1 个答案:

答案 0 :(得分:0)

根据您的意见,您在理解异步概念时遇到了一些麻烦。这就是代码中发生的事情。

// STEP 1
ss = "initalvalue";
dbpic(row.iid,function(df){
    // STEP 3, 4, 5, 6 ...
    ss += df;
});
// STEP 2
ss += "ending";

您需要等到最后一次回调被调用,直到您显示结果。