从带有 .then() 的 Promise 转换为 async/await



我希望更好地理解async/await的想法,以避免嵌套.then((数据库调用。以下代码简化代码将正常工作,但我有一些实例,我想连续进行多个数据库调用。

var sql = require("sqlite3").verbose();
var db = new sql.Database('db.sqlite');
async function query(sql) {
    return new Promise((resolve, reject) => {
        db.all(sql, [], (err, rows) => {
            resolve(rows);
        });
    });
}
query('SELECT name FROM players')
    .then(rows => console.log("Players are: ", rows.map(p => p.name).join(", ")));

如何将其转换为在优雅的庄园中使用异步/等待?

转换承诺链,如下所示:

query('SELECT name FROM players')
  .then(rows => console.log("Players are: ", rows.map(p => p.name).join(", ")));

在异步/等待中,您可以执行以下操作:

async function example() {
  const rows = await query('SELECT name FROM players');
  console.log("Players are: ", rows.map(p => p.name).join(", "));
}

注意:await(当前(只能在 async 函数中使用,不能全局使用。

var sql = require("sqlite3").verbose();
var db = new sql.Database('db.sqlite');

const query = async (sql) => {
    let response;
    await db.all(sql, [], (err,rows) => {
      response = rows;
    })
    return response;
}
const getRows = async () => {
   const rows = await query('SELECT name FROM players');
   console.log("Players are: ", rows.map(p => p.name).join(", ")));
}
getRows();


const query = async (sql) => {
    const [err, rows] = await db.all(sql, [])
    return [err, rows];
}

异步不能在全局范围内

最新更新