Node.js 中的 mysql 非同步/等待僅傳回未定義
P粉821274260
P粉821274260 2024-03-27 12:32:47
0
2
442

我已經嘗試解決這個問題兩天了,基本上已經瀏覽了我在 stackoverflow 上能找到的所有內容,也許我錯過了一些東西,因為我已經盯著它看了這麼久了。

我有一個nodejs文件,它透過sql載入使用者資料並將結果傳送到主文件(伺服器)。

我使用非同步函數再次呼叫此函數以取得該行的值。


var sql = require('./db');
let h = /^[a-zA-Z-_.\d ]{2,180}$/;

 async function getdata(hash){
if (!hash || !hash.match(h)) {
    return {type: "error", msg:"Verarbeitungsfehler, bitte laden Sie die Seite neu.", admin:     false}
}else{

    const response = await sql.query('SELECT * FROM bnutzer WHERE hash = ?',[hash], async     function(err, result, fields){
        //console.log(result)
        return await result
    })

    }   
}




module.exports = { getdata };

async function getvalue(h){

    try{

     var result = await admin.getdata(h); 
    console.log('1'+result);
     if(result{

        console.log('2'+result)
     }

    }catch(err){
        console.log(err);
        console.log('Could not process request due to an error');
        return;

    }
}

getvalue(user.ident)

來自sql查詢的資料是正確的,當我在控制台中輸出它們時,它們也返回正確的結果,但是它們沒有通過返回傳遞給我調用代碼的函數,它只是未定義的,我有在這裡等待的感覺不知何故沒有等待結果,我在這裡錯過了什麼?我已經用網上能找到的幾個星座進行了嘗試,不幸的是我還沒有達到目標。

我已經嘗試不使用 async/await 來寫 sql 查詢,而只使用 async/await 寫呼叫函數,但沒有結果。我嘗試過使用和不使用 sql 回調的各種 sql 查詢。我希望有人能指出我在這裡扭曲或遺漏的內容。

P粉821274260
P粉821274260

全部回覆(2)
P粉194919082

您執行查詢的方法不正確,您應該這樣做

async function getdata(hash){
    if (!hash || !hash.match(h)) {
        return {type: "error", msg:"Verarbeitungsfehler, bitte laden Sie die Seite neu.", admin:     false}
    }else{
        
      try{
        const response = await sql.query('SELECT * FROM bnutzer WHERE hash = ?',[hash])
        return response
      }
      catch(error){
        throw Error(error.message + "error")
      }
     } 
 }

嘗試一下,你不能像你所做的那樣混合回調和等待,只是等待結果,如果出現錯誤,在這種情況下將由 catch 區塊處理

P粉386318086

在好的情況下,您的非同步回呼函數只會將其傳回 response 變數中。但無論如何,在巢狀非同步函數中使用 return wait 並不是最好的方法。因此,您的結果將成為回應變量,您沒有對它執行任何操作,它只會保持原樣,沒有傳回值。因此,您將得到一個普通函數,並且由於其執行結果是 undefined 。因為你沒有從那裡返回任何東西。

我建議:

const sql = require('./db');
const h = /^[a-zA-Z-_.\d ]{2,180}$/;

async function getdata(hash){
  if (!hash || !hash.match(h)) {
    return {type: "error", msg:"Verarbeitungsfehler, bitte laden Sie die Seite neu.", admin:     false}
  }else{
      try {
      const response = await sql.query('SELECT * FROM bnutzer WHERE hash = ?',[hash]);
      return response;
    } catch (err) {
      throw new Error('Cold not proceed with query');  // Wwhatever message you want here
    }
  }   
}


module.exports = { getdata };
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板