如何从Node中的回调函数获取返回值

时间:2019-09-16 18:15:07

标签: javascript node.js sqlite

get_customers()函数在数据库中查询playlists记录,并记录到控制台的每一行。但是data数组作为空列表数组返回。如何从get_playlists函数返回数据?

...result undefined
const sqlite3 = require('sqlite3').verbose();

let db = new sqlite3.Database('mydb.db', (err) => {
  if (err) {
    console.error(err.message);
  }
  console.log('Connected to the database.');
});



function get_playlists(db){
    let sql = `SELECT DISTINCT Name name FROM playlists
               ORDER BY name`;

    let data = []
    db.all(sql, [], (err, rows) => {
      if (err) {
        throw err;
      }
      rows.forEach((row) => {
        console.log(row.name);
        data.push(row.name);
      });
      return data
    });
}

result = get_playlists(db)
console.log('...result', result);
db.close();

1 个答案:

答案 0 :(得分:0)

get_playlists中包装Promise函数的内容,并以rows进行解析:

const sqlite3 = require('sqlite3').verbose();

let db = new sqlite3.Database('mydb.db', (err) => {
  if (err) {
    console.error(err.message);
  }
  console.log('Connected to the database.');
});


function get_playlists(db) {
    return new Promise( (resolve, reject) => {
        let sql = `SELECT DISTINCT Name name FROM playlists ORDER BY name`;

        db.all(sql, [], (err, rows) => {
            if (err) { throw err; }
            resolve(rows);
        });
    })
}


let rows ; 
get_playlists(db).then( res => {
    rows = res;
    rows.forEach( (row) => { console.log('row:', row) } );

});

db.close();