簡體   English   中英

在使用 nodejs 的異步函數中使用 await 和 async 的語法是什么?

[英]What is the syntax to using await and async in asynchronous functions using nodejs?

我正在嘗試在 nodejs 中創建一個基本 API 來對數據庫執行 CRUD 操作。 我不明白為什么結果未定義

exports.getPlaylist = async function (req, res) {
  console.log('Recieved getPlaylist request');
  result = await connection.executeQuery('SELECT * from Users');
  res.status(200).send(result);
  console.log(result); // Logs undefined
};

這是被調用並從數據庫中獲取數據的函數:

async executeQuery(query) {
    connection.query(query, function (err, result) {
        if (err) {
            console.log('Error executing query: ' + err);
        }

        console.log(result); // logs correct data
        return result;

    });
}

您需要“承諾”您的回調。 (請參閱require('utils').promisify )以了解應用於遵循 node.js 回調樣式 ( function(err,result){} ) 的函數的速記。

executeQuery(query) {
    return new Promise((res, rej) => {
        connection.query(query, function (err, result) {
            if (err) {
                console.log('Error executing query: ' + err);
                rej(err)
            } else {
                console.log(result); // logs correct data
                res(result);
            }
        });
    });
}

現在在async函數中你可以await executeQuery(query)

execute不是 promise 基函數,您不能在回調函數上使用await

execute函數更改為promise base

例子:

 executeQuery(query) {
  return new Promise( (resolve, reject) => {
    connection.query(query, function (err, result) {
      if (err) {
          console.log('Error executing query: ' + err);
          reject('Error executing query: ' + err);
      }

      console.log(result); // logs correct data
      resolve(result);

  });
  });

}

在調用函數中添加 try catch

exports.getPlaylist = async function (req, res) {
  console.log('Recieved getPlaylist request');
  try{
    result = await connection.executeQuery('SELECT * from Users');
    res.status(200).send(result);
    console.log(result); // Logs undefined
  } catch(error) {
    console.log(error)
  }

};

暫無
暫無

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

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