[英]Converting from Promise with .then() to 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(", ")));
如何在優雅的庄園中將其轉換為使用 async/await?
轉換承諾鏈,如:
query('SELECT name FROM players')
.then(rows => console.log("Players are: ", rows.map(p => p.name).join(", ")));
進入 async/await,你可以:
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];
}
async 不能在全局范圍內
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.