我希望更好地理解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];
}
异步不能在全局范围内