【问题标题】:How to get return value from callback function in Node [duplicate]如何从Node中的回调函数获取返回值[重复]
【发布时间】:2020-01-17 14:46:33
【问题描述】:

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();

【问题讨论】:

  • console.log 在 db.all 完成之前运行。将 get_playlists 的内容包装在一个 Promise 中并使用 data 解决它

标签: javascript node.js sqlite


【解决方案1】:

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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2014-05-28
    • 2011-11-13
    • 2020-12-03
    • 2019-10-14
    • 1970-01-01
    相关资源
    最近更新 更多