簡體   English   中英

使用 .then() 從 Promise 轉換為 async/await

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM