簡體   English   中英

Node.js。 如何用Async Await語法替換“ return new Promise”?

[英]Node.js. How can I replace 'return new Promise' with Async Await syntax?

我正在使用Node.jsnpm mysql 如何在這里“擺脫” return new Promise並將其替換為async await語法?

const config = require('config');
const mysql = require('mysql');

class DatabaseConnection {

static connect(logger) {
    return new Promise(((resolve, reject) => {

        const con = mysql.createConnection({
            host: config.db.host,
            user: config.db.user,
            password: config.db.password,
            database: config.db.db,
        });

        con.connect((err) => {
            if (err) {
                reject(err);
            }
            else {
                logger.debug('Connected!');
                resolve(con);
            }
        });
    }));
  }

}


module.exports = DatabaseConnection;

由於.connect使用的是回調函數,而不是Promise ,因此您不能這樣做。 有幾種包裝回調的策略。

只需使用util.promisify將API轉換為util.promisify ,即可等待它:

const { promisify } = require("util");

function connect(){

    const con = mysql.createConnection({
        host: config.db.host,
        user: config.db.user,
        password: config.db.password,
        database: config.db.db,
    });

    return promisify(con.connect.bind(con))();
}

您可以使用這種方式。 請參考MDN鏈接以獲取等待的Asyn。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/async_function

const config = require('config'); const mysql = require('mysql');

class DatabaseConnection {
static connect(logger) {

  function getConnect() {
   return new Promise(((resolve, reject) => {
   const con = mysql.createConnection({
              host: config.db.host,
              user: config.db.user,
              password: config.db.password,
              database: config.db.db,
          });
  }
  async function asyncCall(){
            try
              {
              var status =  await getConnect();

              }catch(err){
              reject('failed');
              }
      }

  asyncCall();
}
module.exports = DatabaseConnection;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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